Я довольно успешно использовал ZeroMQ с PHP и написал сервер заданий. У меня есть скрипт администратора, который проверяет работоспособность сервера и выполняет такие действия, как проверка связи с тайм-аутом.
Все работает отлично, когда сервер работает, но когда он не работает (и ZMQPoll
истекает, как и ожидалось), мой скрипт делает то, что должен, НО скрипт никогда не завершается.
Я пробовал очищать и сбрасывать все переменные сокета и т. д., но даже при вызове exit()
PHP-скрипт зависал.
По-видимому, не существует метода socket 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);
}
// ..