[英]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.