Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ZMQ发布子程序在失去网络连接时失败_C#_Python_Publish Subscribe_Zeromq - Fatal编程技术网

C# ZMQ发布子程序在失去网络连接时失败

C# ZMQ发布子程序在失去网络连接时失败,c#,python,publish-subscribe,zeromq,C#,Python,Publish Subscribe,Zeromq,我在一个中型网络上使用ZMQ 2.1进行了一个简单的酒吧预订设置。尽管一些订阅者使用C#绑定,但其他订阅者使用Python绑定,我遇到的问题与这两个订阅者都一样 如果我从运行订户的机器上拔出网络电缆,我会得到一个不可捕获的错误,该错误会立即终止该订户 下面是一个非常简单的Python订户示例(不是实际的生产代码,但足以重现问题): 在C语言中,程序只是无声地终止。在Python中,我至少了解到: 断言失败:rc==0(..\src\zmq_connector.cpp:48) 此应用程序已请求运行

我在一个中型网络上使用ZMQ 2.1进行了一个简单的酒吧预订设置。尽管一些订阅者使用C#绑定,但其他订阅者使用Python绑定,我遇到的问题与这两个订阅者都一样

如果我从运行订户的机器上拔出网络电缆,我会得到一个不可捕获的错误,该错误会立即终止该订户

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

在C语言中,程序只是无声地终止。在Python中,我至少了解到:

断言失败:rc==0(..\src\zmq_connector.cpp:48)

此应用程序已请求运行时以异常方式终止它。 有关更多信息,请联系应用程序的支持团队

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

编辑:

发现以下内容:

似乎这是一个众所周知的问题

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

  • 修复了问题207,zmq_connecter.cpp:48中的断言失败,当 使用了无效的zmq_connect()字符串,或者无法读取主机名 断然的。在这两种情况下,zmq_connect()调用现在都返回-1
尽管connect()确实在Python中抛出了一个无效参数异常(显然不是C?),但recv()仍然失败。如果订户机器突然失去网络,该订户将停止运行

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

原始问题:是否有明显的事情我应该做,但我没有

没有

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

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)