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