我的 PHP 脚本通过 ZeroMQ 与在后端运行并等待消息的 PHP 守护程序进行通信时遇到问题。如果守护进程关闭,则请求的 php 会等待无休止的时间。如果我重新加载页面 firefox 以无限循环结束,我必须重新启动 apache2 以终止正在运行的请求。尤其是在daemon没有完成的开发中,真的很烦人。有人知道我如何设置超时,或者只是说,当守护程序无法访问时跳过发送请求(然后向管理员发送消息,服务器已关闭并返回错误)?
我试过这样的事情:
$context = new ZMQContext(1);
$req = new ZMQSocket($context, ZMQ::SOCKET_REQ);
$req->connect("tcp://localhost:5557");
$read = $write = array();
// Poll socket for a reply, with timeout
$poll = new ZMQPoll();
$poll->add($req, ZMQ::POLL_OUT);
$events = $poll->poll($read, $write, 3000);
$errors = $poll->getLastErrors();
if($errors)
echo "No connection";
else
echo "connection";
... $data = ....
$req->send(json_encode($data));
第二个问题,我使用 shaneharter 的 PHP-Daemon,有时当守护程序由于错误而无法正确启动或者我用 CRTL+C zeromq 关闭它时,仍然保留地址,当我重新启动守护程序时它会抛出异常,这个地址是已在使用中。我可以轻松销毁所有 ZeroMQ 连接吗?