在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程序应该在没有调用的情况下提供许多请求,并且每个请求都可以运行和退出以节省时间。
这个解决方案是否可行。
请帮帮我。
非常感谢!
答案 0 :(得分:0)
在汤姆和瓦里乌斯马尼以及克林特的指导下,最终导致原因缩小为SELinux的许可问题。
详细信息可以参考https://groups.google.com/forum/#!topic/gearman/_dW8SRWAonw。
非常感谢Tom和Wali Usmani和Clint。