jom*_*ido 6 c# python publish-subscribe zeromq
我在中型网络上使用ZMQ 2.1进行简单的pub-sub设置.虽然有些订阅者正在使用C#绑定,但其他订阅者正在使用Python绑定,而我遇到的问题也是相同的.
如果我从运行订户的计算机上拔出网络电缆,我会收到一个无法捕获的错误,该错误会立即终止该订户.
这是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)
Run Code Online (Sandbox Code Playgroud)
在C#中,程序只是默默地终止.在Python中我至少得到这个:
断言失败:rc == 0(....\src\zmq_connector.cpp:48)
此应用程序已请求Runtime以不寻常的方式终止它.有关更多信息,请联系应用程序的支持团队.
我尝试过非阻塞版本和轮询版本,但在任何一种情况下,这种即时终止问题仍然存在.有什么明显我应该做的但是我不是吗?(这对其他人来说很明显:)).
编辑:
找到以下内容:https://zeromq.jira.com/browse/LIBZMQ-207
似乎它是/已知的问题.
该链接进一步链接到Github,其中2.1.10的更改日志有此注释:
- 修复了问题207,zmq_connecter.cpp中的断言失败:48,当使用了无效的zmq_connect()字符串,或无法解析主机名时.在这两种情况下,zmq_connect()调用现在返回-1.
尽管connect()确实在Python中抛出了一个无效参数异常(显然不是C#?),但recv()仍然失败.如果订户计算机突然丢失网络,则该订户将停止运行.
所以 - 我将尝试使用IP地址而不是命名地址,看看是否会绕过这个问题.不理想,但比insta-crash更好.
| 归档时间: |
|
| 查看次数: |
1547 次 |
| 最近记录: |