1

いくつかのデータを収集してクライアントに送信するサーバーがあります。クライアントがサーバーから送信されたデータを取得したことを確認する必要があります。ここの PUB/SUB パターンが最良の選択だと思いましたが、クライアントがデータを取得したかどうかを確認する方法がわかりませんか? 信頼できる PUB/SUB について聞いたことがありますが、実際の例はありません。

考え、提案、例、ヘルプはありますか?

単純な発行元:

import zmq

context = zmq.Context()

server_socket = context.socket(zmq.PUB)
server_socket.bind('tcp://*:5559')

while True:
    server_socket.send('message')

シンプルなサブスクライバー:

import zmq

context = zmq.Context()

client_socket = context.socket(zmq.SUB)
client_socket.setsockopt(zmq.SUBSCRIBE, '')
client_socket.connect('tcp://localhost:5559')

while True:
    print client_socket.recv()

この例では、サブスクライバーが「メッセージ」を受け取ったことを確認する必要があります。

4

2 に答える 2

3

一般的な形式では、pubsubはユース ケースには適していません。pubsub の基本原則の 1 つは、パブリッシャーとサブスクライバーが分離されていることです。つまり、パブリッシャーはサブスクライバーを認識してはならず、サブスクライバーの影響を受けるべきではありません。サブスクライバーの数は、0 も含めていくつでもかまいません。

あなたはそれを破る単一のサブスクライバーを必要としているようです。

于 2013-04-28T17:37:10.673 に答える
0

ZMQガイドでは、PUBソケットからの最初のいくつかのメッセージが常にドロップされる方法と、話している信頼性が必要な場合は、SUBエンドが各メッセージを受信したという確認を送り返す必要がある方法について説明しています.

代わりに PUSH/PULL 接続の使用を検討することをお勧めします。PUB を PUSH に、SUB を PULL に置き換えます。PUSHエンドをバインドするかもしれません。参照: ZMQ PUSH/PULL

于 2013-04-29T21:49:13.733 に答える