gpt4 book ai didi

c# - 失去网络连接时 ZMQ 发布-订阅程序失败

转载 作者:太空狗 更新时间:2023-10-30 00:18:08 33 4
gpt4 key购买 nike

我在一个中型网络上有一个简单的发布-订阅设置,使用的是 ZMQ 2.1。尽管一些订阅者使用的是 C# 绑定(bind),但其他订阅者使用的是 Python 绑定(bind),我遇到的问题对于这两者都是一样的。

如果我从运行订阅者的机器上拔下网络电缆,我会收到一个无法捕获的错误,该错误会立即终止该订阅者。

这是一个非常简单的 Python 订阅者示例(不是实际的生产代码,但足以重现问题):

import zmq

def main(server_address, port):

context = zmq.Context()
sub_socket = context.socket(zmq.SUB)
sub_socket.connect("tcp://" + server_address + ":" + str(port))
sub_socket.setsockopt(zmq.SUBSCRIBE, "KITH1S2")

while True:

msg = sub_socket.recv()
print msg

if __name__ == "__main__": main("company-intranet", 4000)

在 C# 中,程序只是静静地终止。在 Python 中我至少得到了这个:

Assertion failed: rc == 0 (....\src\zmq_connector.cpp:48)

This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information.

我已经尝试过非阻塞版本和轮询版本,但在任何一种情况下,这个即时终止问题仍然存在。有什么明显我应该做但我没有做的事情吗? (也就是说,对其他人来说显而易见 :))。

编辑:

找到以下内容:https://zeromq.jira.com/browse/LIBZMQ-207

似乎这是/曾经是一个已知问题。

该链接进一步链接到 Github,其中 2.1.10 的更改日志有此注释:

  • Fixed issue 207, assertion failure in zmq_connecter.cpp:48, when an invalid zmq_connect() string was used, or the hostname could not be resolved. The zmq_connect() call now returns -1 in both those cases.

尽管 connect() 确实在 Python 中抛出一个 Invalid Argument 异常(显然不是 C#?),recv() 仍然失败。如果订户机器突然失去网络,该订户将停止运行。

所以 - 我将尝试使用 IP 地址而不是命名地址,看看这是否会绕过这个问题。不理想,但比 insta-crash 好。

最佳答案

原始问题:有什么明显我应该做但我没有做的事情吗?

没有。

目前的解决方法是使用 IP 寻址。这不会导致 ZMQ 2.1.x 网络断开时程序失败。

关于c# - 失去网络连接时 ZMQ 发布-订阅程序失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8333630/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com