6
我一直使用ZeroMQ与PHP相当成功,并且写了一个作业服务器。 我有一个管理脚本,它检查服务器的健康状况,并执行类似于超时检测的内容。如何在超时后断开ZeroMQ套接字?
当服务器启动时,一切都很好,但是当它停止时(并且ZMQPoll
超出预期时间),我的脚本执行了它应有的操作 - 但脚本永远不会终止。
我已经尝试清理和取消设置所有套接字变量等。但即使调用exit()
PHP脚本挂起。
似乎没有套接字disconnect()
方法,所以我该如何告诉PHP套接字已经死了,我不希望它挂起?
这是下面的代码从我的管理脚本片段 -
// ...
// waiting for dead server on zmqsock to respond after sending a message
//
$poll = new ZMQPoll;
$poll->add($this->zmqsock, ZMQ::POLL_IN);
$readable = $writeable = array();
$poll->poll($readable, $writeable, $timeout * 1000);
if($errors = $poll->getLastErrors()) {
foreach ($errors as $err) {
throw new Exception($err);
}
}
if(! $readable){
// clean up everything, raise errors, etc..
$poll->clear();
unset($poll, $this->zmqsock, $this->zmqcontext);
// Script hangs here
exit(0);
}
// ..
保存我的一天!谢谢! – Franquis