繁体   English   中英

如何在 c# 中检查 ZMQ 发布者是否存在

[英]How to check ZMQ publisher is alive or not in c#

我在 c# 中使用 ZMQ NetMQ package 来接收来自订阅者的消息。 我能够收到消息,但我坚持在 while 循环中。 如果发布者停止发送数据,我想打破 while 循环。

这是我的订阅者代码:

using (var subscriber = new SubscriberSocket())
            {
                subscriber.Connect("tcp://127.0.0.1:4000");
                subscriber.Subscribe("A");

                while (true)
                {
                    var msg = subscriber.ReceiveFrameString();
                    Console.WriteLine(msg);
                }

Q: “如何查看c#中ZMQ发布者是否存活?”

A:
至少有两种方法可以做到这一点:

  • 一种 )
    修改PUB端和SUB端的代码,以便 Publisher 发送PUB/SUB通道消息,并且独立于此还发送PUSH/PULL -keep-alive 消息以向SUB端证明它是仍然存在,因为在SUB端循环上被自动接收为来自PULL -AccessPoint 的确认。 一段时间内未收到此类软保持活动消息可能会触发SUB端循环以确保break 反向PUSH/PULL通道可以满足相同的原则,其中SUB端不时地询问PUB端,监听PULL端,使用异步发送的软请求消息来注入软- keep-alive 消息进入PUB -channel(记住 TOPIC-filter 是一个普通的 ASCII-filtering 从左边到右边的消息有效负载,所以PUSH -delivered 消息可以很容易地发送要环回的确切文本通过PUB/SUB返回给发送者,匹配本地已知的由同一个SUB端实体维护的 TOPIC 过滤器)

  • 二)
    在某些情况下,您无法修改PUB端代码,我们仍然可以设置一个基于时间的计数器,在该计数器过期后,不会收到任何消息(无论是使用已知倍数的精确定时aSUB.poll(... ) -s,它允许在没有aSUB.recv( zmq.NOBLOCK )的相互阻塞的情况下运行一些按优先级排序的交错控制循环,或者通过使用在循环避免一些忙循环,减轻 CPU 的sleep() -s )。 如果发生这种超时,到目前为止还没有收到任何实际消息,我们可以按照上面的要求自动中断SUB端循环。

QED

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM