Ho usato ZeroMQ con successo con PHP e ho scritto un job server. Ho uno script di amministrazione che controlla l'integrità del server e fa cose come il ping con un timeout.Come scollegare il socket ZeroMQ dopo il timeout?
Tutto funziona alla grande quando il server è attivo, ma quando è inattivo (e ZMQPoll
timeout come previsto) il mio script fa quello che dovrebbe - MA lo script non termina mai.
Ho provato a pulire e disattivare tutte le variabili di socket, ecc., Ma anche chiamando lo exit()
lo script PHP si blocca.
Non sembra essere un metodo socket disconnect()
, quindi come faccio a dire a PHP che il socket è morto e non voglio che si blocchi?
Si tratta di un frammento di codice seguente dal mio script 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);
}
// ..
salvato la mia giornata! Grazie! – Franquis