2017-01-11 9 views
0

мне было интересно, если есть способ поднять события на новой подписку на издатель розеткуZeroMQ гнезда издателя - поднять событие по подписке

Например:

 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 Безразлично «На самом деле, существует, но мне было интересно, есть ли что-то в этом роде.

Мне нужен мой сервер, чтобы знать все подписки.

я, хотя около двух способов его реализации:

  1. Создание дополнительного маршрутизатора сокет на сервере, все подписки будут отправлены как в гнездо издателя и к маршрутизатору сокетом (отменяют подписку, а). Это позволит мне опросить подписки с маршрутизатора.

  2. Не использовать издателя/подписчика вообще, создать все механизмы pubsub с маршрутизатором/дилером.

Что бы вы мне посоветовали?

+0

Как указано в руководстве zeroMQ, невозможно отслеживать подписки, но посмотрите на [Advanced Pub-Sub-Pattern] (http://zguide.zeromq.org/page:all#Reliable-Pub-Sub -Clone-Pattern) вы найдете шаблон Reliable-Pub-Sub (Clone), который использует второй разъем ROUTER/DEALER для достижения того, что вы хотите – dwonisch

ответ

1

Если вы используете сокет XPUB, а не PUB, вы можете получать сообщения о подписке, как обычные сообщения по любому типу сокетов.

+0

Можно с уверенностью отметить, что ** [Ответ] * * * и ** [Предложение по решению] ** - две разные вещи. ** [Ответ] должен быть «Нет, нет такого механизма ** в транспортных сервисах ZeroMQ для функций OnSubscription() **, но можно добавить такое поведение ** в качестве дополнительной сигнализации, используя отдельный транспорт архетип или использовать тот же, но расширенный архетип «XPUB/XSUB», который обеспечивает средства для сигнализации о таком событии на основе кода и позволяет противоположной стороне предпринимать действия (действия), подобные 'raise' ...» Это было бы верно и Справедливая. – user3666197

+0

@ David Спасибо за ответ, я проверил, и это действительно так, я могу слушать подписки, отменять подписку через XPublisherSocket. Мне все равно будет недостаточно. Мой план состоит в том, чтобы сделать сервер, который вызывает событие подписки, когда кто-то начал подписываться на какую-либо подписку и поднимает событие отмены подписки, когда никто не подписывается на эту тему. Для этого мне придется отслеживать все темы и идентификацию клиентов, а также внедрять механизм биения для отслеживания отключенных клиентов. – areller

+0

@David Я думаю, что маршрутизатор более подходит для последнего, поскольку он знает все идентификаторы клиентов из коробки. Кроме того, я не смог реализовать heartbeat с XPublisher, он не позволяет мне читать сообщения, которые не привязаны к подпискам. – areller

 Смежные вопросы

  • Нет связанных вопросов^_^