2017-01-11 2 views
0

にイベントを発生させる:もちろんZeroMQパブリッシャーソケット - たとえば、パブリッシャソケット</p> <p>に新しいサブスクリプションのイベントを上げる方法がある場合、私は思っていたサブスクリプション

 PublisherSocket publisher = new PublisherSocket(); 

     publisher.Bind("tcp://*:5555"); 

     NetMQPoller poller = new NetMQPoller { publisher }; 
     poller.RunAsync(); 

     poller.OnSubscription += topic => 
     { 
      AddToPool(topic); 
     }; 

     Task.Factory.StartNew(() => 
     { 
      SubscriberSocket sub = new SubscriberSocket(); 
      sub.Connect("tcp://127.0.0.1:5555"); 

      Thread.Sleep(1000); 
      sub.Subscribe("A"); 
     }, TaskCreationOptions.LongRunning); 

     publisher.ReceiveReady += Publisher_ReceiveReady; 

OnSubscription doesnのを本当に存在していませんが、周りに道があるかどうか疑問に思っていました。

私のサーバーは、すべての購読を認識する必要があります。約2通りの方法がそれを実装するのに

I:

  1. は、サーバーに追加のルータソケットを作成しますが、すべてのサブスクリプションは、パブリッシャのソケットに、ルータのソケット(unsubscriptions同様)の両方に送信されます。これにより、ルータからの購読をポーリングできます。

  2. パブリッシャー/サブスクライバを一切使用しないで、すべてのpubsubメカニズムをルーター/ディーラーで作成します。

あなたは私に何を提案しますか?

+0

zeroMQガイドに記載されているように、サブスクリプションを追跡することはできませんが、[Advanced Pub-Sub-Pattern](http://zguide.zeromq.org/page:all#Reliable-Pub-Sub -Clone-Pattern)あなたが望むものを達成するために2番目のROUTER/DEALERソケットを使用しているReliable-Pub-Sub(Clone)パターンを見つけるでしょう – dwonisch

答えて

1

PUBソケットではなくXPUBを使用すると、他のソケットタイプの通常のメッセージと同じように、サブスクリプションメッセージを受信できます。

+0

** [An Answer] * *と** [A Solution Proposal] **は2つの異なるものです。 ** OnSubscription()機能のためにZeroMQトランスポートサービスには**のようなメカニズムはありません**しかし、別のトランスポートを使用して追加シグナリングとしてそのような動作**を追加することは可能ですarchetypeを使用するか、同じだが拡張された同じタイプの 'XPUB/XSUB'を使用して、そのようなイベントのコードベースのシグナリングの手段を提供し、反対側が' raise'のようなアクションをとることを許可します... "公正。 – user3666197

+0

@David返信いただきありがとうございます。私は確認しました。本当にそうです。私はサブスクリプションを聞くことができ、XPublisherSocketを介してサブスクリプションを聴くことができます。それでも私にとっては信頼できるものではありません。私の計画は、誰かが何らかのサブスクリプションを購読し始めたときにサブスクリプションイベントを発生させ、誰もそのトピックにそれ以上購読していないときにサブスクリプション解除イベントを発生させるサーバーを作ることです。そのためには、トピックとクライアントのすべてのアイデンティティーを把握し、切断されたクライアントを追跡するハートビートメカニズムを実装する必要があります。 – areller

+0

@Davidルータのソケットは、すべてのクライアントのアイデンティティを知っているので、後者にはルータソケットが適していると思います。また、私はXPublisherでハートビートを実装できませんでした。サブスクリプションに割り当てられていないメッセージを読むことはできません。 – areller

関連する問題