バックエンドで実行され、メッセージを待機している PHP デーモンと ZeroMQ を介して通信する PHP スクリプトに問題があります。デーモンがダウンしている可能性がある場合、要求元の php は無限の時間待機します。ページをリロードすると、Firefox が無限ループに陥り、実行中のリクエストを強制終了するために apache2 を再起動する必要があります。特にデーモンが完成していない開発では、本当に面倒です。誰かがタイムアウトを設定する方法を知っていますか、またはデーモンに到達できないときにリクエストの送信をスキップする方法を知っていますか(次に、管理者にメッセージを送信し、サーバーがダウンしてエラーを返します)?
私はこのようなことを試しました:
$context = new ZMQContext(1);
$req = new ZMQSocket($context, ZMQ::SOCKET_REQ);
$req->connect("tcp://localhost:5557");
$read = $write = array();
// Poll socket for a reply, with timeout
$poll = new ZMQPoll();
$poll->add($req, ZMQ::POLL_OUT);
$events = $poll->poll($read, $write, 3000);
$errors = $poll->getLastErrors();
if($errors)
echo "No connection";
else
echo "connection";
... $data = ....
$req->send(json_encode($data));
2 番目の質問、私は shaneharter の PHP-Daemon を使用しています。エラーが原因でデーモンが正しく起動しない場合や、CRTL+C でシャットダウンした場合、zeromq はまだアドレスを予約していますが、デーモンを再起動すると例外がスローされます。このアドレスはすでに使用されています。すべての ZeroMQ 接続を簡単に破棄できますか?