闲言少述,直接上源码:
client
-
/*
-
* File:
-
* simple-gearman-client.cpp
-
* Auth:
-
* Hank(hongkuiyan@yeah.net)
-
* Desc:
-
* Example code to show how to send a string to a function called "test_function" .
-
* Cypt:
-
* Gearman server and library Version 1.1.12
-
* Compile:
-
* gcc -o simple-gearman-client simple-gearman-client.cpp -I/usr/local/gearman/include -L/usr/local/gearman/lib -lgearman
-
* Usage:
-
* ./simple-gearman-client
-
*/
-
-
#include <stdio.h>
-
#include <stdlib.h>
-
#include <string.h>
-
#include <unistd.h>
-
#include <libgearman/gearman.h>
-
-
using namespace std;
-
-
int main(int argc, char* argv[])
-
{
-
gearman_return_t gearRet;
-
gearman_client_st* gearClient;
-
-
char* gearSvrHost=(char*)"10.10.13.8", *gearSvrPort=(char*)"4730";
-
-
gearClient = gearman_client_create(NULL);
-
gearman_client_set_options(gearClient, GEARMAN_CLIENT_FREE_TASKS);
-
gearman_client_set_timeout(gearClient, 15000);
-
-
gearRet = gearman_client_add_server(gearClient, gearSvrHost, atoi(gearSvrPort));
-
if (gearman_failed(gearRet))
-
{
-
return EXIT_FAILURE;
-
}
-
-
#if 1
-
-
for (int i=0; i < 5; i++)
-
{
-
gearRet = gearman_client_do_background(gearClient,
-
"test_function",
-
NULL,
-
"param1 param2 345",
-
(size_t)strlen("param1 param2 345"),
-
NULL);
-
if (gearRet == GEARMAN_SUCCESS)
-
{
-
fprintf(stdout, "Work success!\n");
-
}
-
else if (gearRet == GEARMAN_WORK_FAIL)
-
{
-
fprintf(stderr, "Work failed\n");
-
}
-
else if (gearRet == GEARMAN_TIMEOUT)
-
{
-
fprintf(stderr, "Work timeout\n");
-
}
-
else
-
{
-
fprintf(stderr, "%d,%s\n", gearman_client_errno(gearClient), gearman_client_error(gearClient));
-
}
-
}
-
-
#endif
-
-
-
#if 0
-
gearman_argument_t gearValue = gearman_argument_make(0, 0,
-
"Reverse Me", strlen("Reverse Me"));
-
gearman_task_st* gearTask = gearman_execute(gearClient,
-
"reverse", strlen("reverse"),
-
NULL, 0,
-
NULL,
-
&gearValue, 0);
-
-
/* If gearman_execute() can return NULL on error */
-
if (gearTask == NULL)
-
{
-
fprintf(stderr, "Error: %s\n", gearman_client_error(gearClient));
-
gearman_client_free(gearClient);
-
return EXIT_FAILURE;
-
}
-
-
/* Make sure the task was run successfully */
-
if (gearman_success(gearman_task_return(gearTask)))
-
{
-
/* Make use of value */
-
gearman_result_st *gearResult= gearman_task_result(gearTask);
-
printf("%.*s\n", (int)gearman_result_size(gearResult), gearman_result_value(gearResult));
-
}
-
#endif
-
-
gearman_client_free(gearClient);
-
-
return EXIT_SUCCESS;
- }
worker
-
/*
-
* File:
-
* simple-gearman-worker.cpp
-
* Auth:
-
* Hank(hongkuiyan@yeah.net)
-
* Desc:
-
* Example code to show how to receive a string to a function called "test_function"
-
* Cypt:
-
* Gearman server and library Version 1.1.12
-
* Compile:
-
* gcc -o simple-gearman-worker simple-gearman-worker.cpp -I/usr/local/gearman/include -L/usr/local/gearman/lib -lgearman
-
* Usage:
-
* ./simple-gearman-worker
-
*/
-
-
#include <errno.h>
-
#include <stdio.h>
-
#include <stdlib.h>
-
#include <string.h>
-
#include <unistd.h>
-
#include <iostream>
-
-
#include <libgearman/gearman.h>
-
-
using namespace std;
-
-
static void *test_function(gearman_job_st *gearJob,
-
void* context,
-
size_t* resultSize,
-
gearman_return_t* gearRet);
-
-
-
int main(int argc, char* argv[])
-
{
-
gearman_return_t gearRet;
-
gearman_worker_st* gearWorker;
-
-
char* gearSvrHost=(char*)"10.10.13.8", *gearSvrPort=(char*)"4730";
-
char* gearContext = new char(50);
-
-
gearWorker = gearman_worker_create(NULL);
-
if (gearWorker == NULL)
-
{
-
cout << "ERROR: " << gearman_worker_error(gearWorker) << endl;
-
return EXIT_FAILURE;
-
}
-
-
gearRet = gearman_worker_add_server(gearWorker, gearSvrHost, atoi(gearSvrPort));
-
if (gearman_failed(gearRet))
-
{
-
cout << "ERROR: " << gearman_worker_error(gearWorker) << endl;
-
return EXIT_FAILURE;
-
}
-
-
gearRet = gearman_worker_add_function(gearWorker,
-
"test_function",
-
0,
-
test_function,
-
gearContext);
-
if (gearman_failed(gearRet))
-
{
-
cout << "ERROR: " << gearman_worker_error(gearWorker) << endl;
-
return EXIT_FAILURE;
-
}
-
-
cout << "waiting for job ... " << endl;
-
-
while (1)
-
{
-
gearRet = gearman_worker_work(gearWorker);
-
if (gearman_failed(gearRet))
-
{
-
cout << "ERROR: " << gearman_worker_error(gearWorker) << endl;
-
break;
-
}
-
}
-
-
delete gearContext;
-
gearman_worker_free(gearWorker);
-
-
return EXIT_SUCCESS;
-
-
}
-
-
static void *test_function(gearman_job_st *gearJob,
-
void *context,
-
size_t *resultSize,
-
gearman_return_t *gearRet)
-
{
-
cout << "\n\njob :" << gearman_job_handle(gearJob) << endl;
-
cout << "context :" << (char*)context << endl;
-
-
char *jobWorkload = (char*)gearman_job_workload(gearJob);
-
size_t jobWorkloadSize = gearman_job_workload_size(gearJob);
-
-
-
char *jobRequest = new char[1024];
-
jobRequest = (char*)malloc(1024);
-
if (jobRequest == NULL)
-
{
-
cout << "new jobRequest failed" << errno << endl;
-
*gearRet = GEARMAN_WORK_FAIL;
-
return NULL;
-
}
-
-
snprintf((char*)jobRequest, jobWorkloadSize+1, (char*)jobWorkload);
-
cout<<"job = "<< gearman_job_handle(gearJob) << " jobWorkloadSize=" << jobWorkloadSize << " jobRequest=" <<jobRequest << endl;
-
-
char *jobResult = new char[1024];
-
if (jobResult == NULL)
-
{
-
cout <<"new jobResult failed" << errno << endl;
-
*gearRet = GEARMAN_WORK_FAIL;
-
return NULL;
-
}
-
-
-
sprintf((char*)jobResult, "%s->jobResult", (char*)jobRequest);
-
size_t jobResultSize = strlen((char*)jobResult);
-
cout <<"job = "<< gearman_job_handle(gearJob) << " jobResultSize=" << jobResultSize << " jobResult=" << jobResult << endl;
-
-
-
delete []jobResult;
-
delete []jobRequest;
-
-
*gearRet = GEARMAN_SUCCESS;
-
return NULL;
- }