Я довольно успешно использовал ZeroMQ с PHP и написал сервер заданий. У меня есть скрипт администратора, который проверяет работоспособность сервера и делает что-то вроде pinging его с таймаутом.Как отключить сокет 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