我正在寻找一种更好的方法,以检测断开时,路由器/服务器崩溃或不可用,因为一个糟糕的连接。(我从一个在wifi上运行的经销商/客户端上收听)我找到了
zmq_socket_monitor()
并发现NetMQ具有相同的特性。我从文档中了解到,当您监视一个套接字时,您会给它一个inproc地址,并且它会通知您使用该地址进行的任何套接字更改。除了NetMQMonitor之外,我真的找不到任何
unit tests
的例子,我的问题是我在下面的代码中是否正确地使用了它?与NetMQPoller一起使用它有效吗?
// run poller on a separate thread
_poller = new NetMQPoller { _dealer, _subscriber, _outgoingMessageQueue, _subscriptionChanges};
_poller.RunAsync();
// run a monitor listening for Connected and Disconnected events
_monitor = new NetMQMonitor(_dealer, "inproc://rep.inproc", SocketEvents.Disconnected | SocketEvents.Connected);
_monitor.EventReceived += _monitor_EventReceived;
_monitor.StartAsync();
*更新*
所以..。在发布这篇文章之后,我在
NetMQPoller tests on github
中找到了答案,这样就可以回答您是否可以将NetMQMonitor与NetMQPoller一起使用,但我仍然好奇是否有人对使用监视器跟踪连接状态的总体方法有想法。以下是任何感兴趣的人的相关代码:
[Fact]
public void Monitoring()
var listeningEvent = new ManualResetEvent(false);
var acceptedEvent = new ManualResetEvent(false);
var connectedEvent = new ManualResetEvent(false);
using (var rep = new ResponseSocket())
using (var req = new RequestSocket())
using (var poller = new NetMQPoller())
using (var repMonitor = new NetMQMonitor(rep, "inproc://rep.inproc", SocketEvents.Accepted | SocketEvents.Listening))
using (var reqMonitor = new NetMQMonitor(req, "inproc://req.inproc", SocketEvents.Connected))
repMonitor.Accepted += (s, e) => acceptedEvent.Set();
repMonitor.Listening += (s, e) => listeningEvent.Set();
repMonitor.AttachToPoller(poller);
int port = rep.BindRandomPort("tcp://127.0.0.1");
reqMonitor.Connected += (s, e) => connectedEvent.Set();
reqMonitor.AttachToPoller(poller);
poller.RunAsync();
req.Connect("tcp://127.0.0.1:" + port);
req.SendFrame("a");
rep.SkipFrame();
rep.SendFrame("b");
req.SkipFrame();