He estado usando ZeroMQ con bastante éxito con PHP y he escrito un servidor de trabajos. Tengo un script de administrador que verifica el estado del servidor y hace cosas como hacer ping con un tiempo de espera.¿Cómo desconectar el zócalo ZeroMQ después del tiempo de espera?
Todo funciona muy bien cuando el servidor está activo, pero cuando está inactivo (y ZMQPoll
se agota el tiempo previsto) mi secuencia de comandos hace lo que se supone que debe - PERO la secuencia de comandos nunca termina.
He intentado limpiar y desarmar todas las variables de socket, etc. pero incluso al llamar al exit()
, se cuelga el script de PHP.
No parece haber un método de socket disconnect()
, entonces, ¿cómo le digo a PHP que el socket está muerto y no quiero que cuelgue?
Este es un fragmento de código a continuación de mi guión admin -
// ...
// 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);
}
// ..
Guardado mi día! ¡Gracias! – Franquis