ZeroMQ 发布者套接字 - 在订阅时引发事件
ZeroMQ publisher socket - raise event on subscription
我想知道是否有办法在新订阅发布者套接字时引发事件
例如:
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
并不存在,但我想知道是否有任何解决方法。
我需要我的服务器知道所有订阅。
我想到了两种实现方式:
在服务器中创建一个额外的路由器套接字,所有订阅都将发送到发布者套接字和路由器套接字(取消订阅也是如此)。这将允许我从路由器轮询订阅。
根本不用publisher/subscriber,用router/dealer创建所有pubsub机制。
你会建议我做什么?
如果您使用 XPUB 而不是 PUB 套接字,您可以像在任何其他套接字类型上接收常规消息一样接收订阅消息。
我想知道是否有办法在新订阅发布者套接字时引发事件
例如:
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
并不存在,但我想知道是否有任何解决方法。
我需要我的服务器知道所有订阅。
我想到了两种实现方式:
在服务器中创建一个额外的路由器套接字,所有订阅都将发送到发布者套接字和路由器套接字(取消订阅也是如此)。这将允许我从路由器轮询订阅。
根本不用publisher/subscriber,用router/dealer创建所有pubsub机制。
你会建议我做什么?
如果您使用 XPUB 而不是 PUB 套接字,您可以像在任何其他套接字类型上接收常规消息一样接收订阅消息。