2017-01-11 8 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 아무튼를 실제로 존재하지는 않지만 주위에 어떤 방법이 있는지 궁금해하고있었습니다.

모든 구독을 알기 위해서는 내 서버가 필요합니다. 에 대한 두 가지 방법을 구현하지만

I :

  1. 서버의 추가 라우터 소켓을 작성합니다 모든 구독은 게시자 소켓 및 라우터 소켓 (구독 취소뿐만 아니라)에 모두 전송됩니다. 이렇게하면 라우터에서 구독을 폴링 할 수 있습니다.

  2. publisher/subscriber를 전혀 사용하지 않는 경우 router/dealer를 통해 모든 pubsub 메커니즘을 만듭니다.

내가 뭐라고 하시겠습니까?

+0

zeroMQ 안내서에 쓰여 있듯이 구독을 추적 할 수는 없지만 [Advanced Pub-Sub-Pattern] (http://zguide.zeromq.org/page:all#Reliable-Pub-Sub -Clone-Pattern) 두 번째 ROUTER/DEALER 소켓을 사용하여 원하는 것을 달성하는 Reliable-Pub-Sub (복제) 패턴을 찾을 수 있습니다. – dwonisch

답변

1

PUB 소켓이 아닌 XPUB를 사용하면 다른 소켓 유형의 일반 메시지처럼 가입 메시지를 수신 할 수 있습니다.

+0

** [An Answer] * * 및 ** [솔루션 제안] **은 두 가지 별개의 것입니다. ** [대답]은 "아니요, OnSubscription() 기능을위한 ZeroMQ 전송 서비스에는 이러한 메커니즘이 없습니다 ** **하지만 별도의 전송을 사용하여 추가 신호로 이러한 동작을 추가 할 수 있습니다 ** archetype을 사용하거나 같은 이벤트를 코드 기반 시그널링을위한 수단을 제공하고 반대편이'raise'와 같은 액션을 취할 수 있도록 해주는 동일한하지만 확장 된 아키 타입'XPUB/XSUB'를 사용합니다 ... " 공정한. – user3666197

+0

@David 답장을 보내 주셔서 감사합니다. 실제로 확인해 보았습니다. XPublisherSocket을 통해 구독, 구독 취소를들을 수 있습니다. 그것은 여전히 ​​나를 위해 충분히 신뢰할 수 없을 것입니다. 내 계획은 누군가가 구독을 구독 할 때마다 구독 이벤트를 제기하고 아무도 해당 주제에 더 이상 가입하지 않을 때 구독 취소 이벤트를 발생시키는 서버를 만드는 것입니다. 이를 위해 나는 모든 주제와 클라이언트 신원을 추적해야하며 또한 연결이 끊어진 클라이언트를 추적하기위한 하트 비트 메커니즘을 구현해야합니다. – areller

+0

@David 라우터 소켓은 모든 클라이언트 ID를 알기 때문에 후자의 경우 라우터 소켓이 더 적합하다고 생각합니다. 또한 XPublisher를 사용하여 하트 비트를 구현할 수 없었으므로 구독에 할당되지 않은 메시지를 읽을 수 없습니다. – areller