我确实使用 reverse_worker 作为工作人员检查了示例 reverse_client_cb。工作人员被调用和执行,但在客户端中没有调用单个回调(完成、失败等)。
下面是我写的一个示例工作人员和客户端,用于检查相同但相同的问题。是否需要在 gearman 或 worker 和客户端的执行方式中完成任何配置?
样品工人.cc
void* myfunc(gearman_job_st *job, void *data,size_t *size,gearman_return_t *ret)
{
printf("\nmyfunc called\n");
*ret=GEARMAN_SUCCESS;
char *result=(char*)calloc(30,sizeof(char));
strcpy(result,"work completed");
*size=30;
return result;
}
int main(int args,char* argv[])
{
gearman_worker_st worker;
gearman_worker_create(&worker);
gearman_worker_add_server(&worker,"localhost",0);
gearman_return_t ret = gearman_worker_add_function(&worker,"sample",0,myfunc,NULL);
while(1) gearman_worker_work(&worker);
gearman_worker_free(&worker);
return 0;
}
示例客户端.cc
static gearman_return_t complete(gearman_task_st *task)
{
printf("Completed: %s %.*s\n", gearman_task_job_handle(task),
(int)gearman_task_data_size(task), (char *)gearman_task_data(task));
return GEARMAN_SUCCESS;
}
static gearman_return_t fail(gearman_task_st *task)
{
printf("Failed: %s\n", gearman_task_job_handle(task));
return GEARMAN_SUCCESS;
}
int main(int args,char* argv[])
{
gearman_client_st client;
gearman_return_t ret;
gearman_client_create(&client);
gearman_client_add_server(&client,"localhost",0);
gearman_task_st task,*task2;
gearman_client_add_task(&client,&task,NULL,"sample",NULL,argv[1],(size_t)strlen(argv[1]),&ret);
gearman_client_set_complete_fn(&client, &complete);
gearman_client_set_fail_fn(&client, &fail);
gearman_client_run_tasks(&client);
gearman_client_free(&client);
return 0;
}
用法
./sampleworker
./sampleclient Hello
“myfunc called”被打印出来,客户端也在等待工作人员完成工作。但是没有从完整或失败的功能中打印出来