2017-04-11 5 views
0

私のドキュメントを読んだことがあります。ほとんどの例は、基本的な使用例です。zmqのpub-subを使った動的なトピックは、うまくいくのでしょうか?

単純に1つのプロセスがXイベントを発行し、別のプロセスがXイベントを発行します。

私のアプリケーションでは、Xは多少の変数です。だから私はXが自分のユーザーを意味すると言うことができます。

user-IDのような1つのサーバーイベントから公開することができます。つまり、1000sのユーザーがサーバーに接続されていれば、公開され、多数の動的トピックを購読し、さらに20台のサーバーがその1000sを購読します。このサーバー上のトピック

例を参照してください。

私は10台のサーバーを持っています。各サーバーには1000人のユーザーが接続されています。合計10kユーザーです。 私は各ユーザーから別のユーザーにXデータを送信する必要があります。

だから私はこれをやりました。

Xサーバーuser-IDデータを公開(1 1Kが公開、接続されているユーザーのを公開)

Yサーバは、パブサブの最適な方法がどうあるべきかuser-IDデータ(10Kが送信され、各サーバにリクエストをサブスクライブ)

を購読します動的なトピックではサーバー間で使用される帯域幅が少なくなりますか?

注意::

ユーザIDは、IDは動的数値であり、それはどこにも保存することができないいくつかのリアルタイムデータを公開一例です。

答えて

1

ZeroMQサブスクリプションマッチングでは、プレフィックスマッチングtrieを使用してPUBソケットに実装されています。これは非常に効率的なデータ構造であり、10Kサブスクリプションと10K msg /秒はまったく問題にはならないと思います。

PUBソケットは、一致するサブスクリプションのメッセージのみを送信します(したがって、「無駄」はありません)。メッセージがサブスクリプションと一致しない場合、PUBソケットはそれをドロップします。一致するメッセージは、サブスクライブしているSUBソケットにのみ送信されます。

サブスクリプションを追加または削除すると、SUBソケットは接続されたPUBソケットを送信します。各PUBソケットはトピックトライを更新します。

私の推測は10k subsと10k msgs/sは問題ありませんが、テストコードを書いて試してみてください。 ZeroMQの素晴らしい点は、異なるアーキテクチャをテストすることはそれほど重要ではないということです。

+0

しかし、誰かがSUBソケットだけがサブスクリプションとPUBをリストしているだけで、すべてのSUB彼らは購読されていません..そしてSUBはすべてのメッセージをフィルタリングします... –

+0

私はそれが過去のように働いたと思います。しかし、私の理解は、ZERMQの最近のバージョンがPUBソケットのサブスクリプションを管理することです。 – colini

1

は、私の知る限りpyzmqのAPI発行者に知っているように任意のトピック

socket.send("%d %d" % (topic, messagedata)) 

にメッセージを送ることができますし、加入者は、私はそうsetsockopt

topicfilter = "10001" 
socket.setsockopt(zmq.SUBSCRIBE, topicfilter) 

で自分の興味のあるトピックについては、次のトピックにフィルタを設定しますあなたの計画を完全に実行できると思っています。

+0

私の質問ではありません。私の質問は、流れや最適なロジックについてはちょっとです... 10kの公開通話と10kの購読通話を持つことは大丈夫でしょうか? –

+0

@dev。mraj 10kパブリッシュコールは大丈夫ですが、10kサブスクライブコールはどういう意味ですか? setsockoptメソッドまたは10kクライアントの10k呼び出し? setsockoptは高価です。 – DontPanic

+0

私は必要なものを持っています。..... –

関連する問題