9

ZeroMQ 担当者/要件を使用しようとしていますが、サーバー側のエラーを処理する方法がわかりません。ここからコードを見てください:

socket.bind("tcp://*:%s" % port)
while True:
    #  Wait for next request from client
    message = socket.recv()
    print "Received request: ", message
    time.sleep (1)  
    socket.send("World from %s" % port)

私の問題は、クライアントが socket.send() を呼び出してからハングまたはクラッシュした場合にどうなるかです。サーバーが socket.send() または socket.recv() で永遠に動かなくなるのではないでしょうか?

TCP ソケットの問題ではないことに注意してください。TCP ソケットを使用すると、簡単に接続を切断できます。ZMQ を使用すると、接続が暗黙的に管理され、「セッション」または「接続」を中断して最初からやり直すことができるかどうかわかりません。

4

3 に答える 3

6

TCP ソケットを終了するのとほぼ同じ方法で、ZMQ ソケットを終了できます。

socket.close()

メッセージを待機する必要があるが、限られた時間だけ待機する必要がある場合は、timeoutフラグを渡してsocket.recv(timeout=1024)、TCP ソケットがタイムアウトまたは切断した場合と同じ方法でタイムアウト エラーのケースを処理できます。すべてがエラー状態にある可能性がある複数のソケットを管理する必要がある場合は、Pollerクラスを使用してこれを実行できます。

于 2014-02-07T22:33:54.573 に答える