Gearman客户端在网页上失败了,但是在命令行界面成功了吗?

时间:2015-10-30 05:32:59

标签: c++ linux sockets gearman

http://gearman.org/getting-started/中使用命令“php client.php”的client.php示例可以成功地与worker.php通信,但在webbrowser中使用无法传达给worker.php,有谁知道为什么以及如何配置gearmand还是可以解决?

操作系统:CentOS 6.7 Gearmand版本:1.1.8。 Gearmand以“gearmand -l stderr --verbose DEBUG”开头 当客户端使用“gearman -f work< / somedir / somefile”命令进行通信时,信息按预测返回,终端显示信息如下,

DEBUG 2015-10-30 11:56:01.371309 [1]收到GEARMAN_GRAB_JOB_ALL :: 58ca:3fa1:77f:0%4234047483:2705334353 - > libgearman服务器/ thread.cc:310   DEBUG 2015-10-30 11:56:01.371317 [1] :: 58ca:3fa1:77f:0%4234047483:41704观看POLLIN - > libgearman服务器/ gearmand_thread.cc:151   DEBUG 2015-10-30 11:56:01.371334 [proc] :: 58ca:3fa1:77f:0%4234047483:41704数据包命令GEARMAN_CAN_DO - > libgearman服务器/ server.cc:111   DEBUG 2015-10-30 11:56:01.371344 [proc]注册功能:工作 - > libgearman服务器/ server.cc:522   DEBUG 2015-10-30 11:56:01.371352 [proc] :: 58ca:3fa1:77f:0%4234047483:41704数据包命令GEARMAN_GRAB_JOB_ALL - > libgearman服务器/ server.cc:111   DEBUG 2015-10-30 11:56:01.371371 [1]收到RUN唤醒事件 - > libgearman服务器/ gearmand_thread.cc:610

但是当webbrowser导航到“http://localhost/client.php”时,网络浏览器中没有显示任何信息,终端也没有显示任何内容。

nginx的error.log中的信息如下: 2015/10/30 04:59:10 [错误] 2756#0:* 2在stderr发送的FastCGI:“PHP消息:PHP警告:GearmanClient :: doNormal():send_packet(GEARMAN_COULD_NOT_CONNECT)无法发送服务器选项包 - > libgearman / connection.cc:第4行的/usr/share/nginx/html/client.php中的485“从上游读取响应头,客户端:127.0.0.1,服务器:localhost,请求:”GET / client。 php HTTP / 1.1“,上游:”fastcgi://127.0.0.1:9000“,主持人:”localhost“

[root @ localhost html] #cat client.php

<?php
$client= new GearmanClient();
$client->addServer("127.0.0.1",4730);
print $client->doNormal("reverse", "Hello World!");
?>

[root @ localhost html] #cat worker.php

<?php
$worker= new GearmanWorker();
$worker->addServer("127.0.0.1",4730);
$worker->addFunction("reverse", "my_reverse_function");
while ($worker->work());

function my_reverse_function($job)
{
  return strrev($job->workload());
}
?>

可能问题是网页对套接字操作有限制或许可吗?

我认为使用--http-port选项的配置现在可能不成熟和稳定,所以我首选的解决方案是作为客户端的php网页可以直接向Gearmand提交作业,由C ++编译的工作程序处理。并且c ++ worker程序应该在没有调用的情况下提供许多请求,并且每个请求都可以运行和退出以节省时间。

这个解决方案是否可行。

请帮帮我。

非常感谢!

1 个答案:

答案 0 :(得分:0)

在汤姆和瓦里乌斯马尼以及克林特的指导下,最终导致原因缩小为SELinux的许可问题。

详细信息可以参考https://groups.google.com/forum/#!topic/gearman/_dW8SRWAonw

非常感谢Tom和Wali Usmani和Clint。