为了账号安全,请及时绑定邮箱和手机立即绑定

zmq_getsockopt 错误 : zmq.error.ZMQError:

zmq_getsockopt 错误 : zmq.error.ZMQError:

守候你守候我 2022-10-18 14:40:45
我是使用 ZeroMQ 的新手,所以我在处理一些代码。如果我执行以下代码,则不会显示错误:import zmq.asyncioctx = zmq.asyncio.Context()rcv_socket = ctx.socket(zmq.PULL)rcv_socket.connect("ipc:///tmp/test")rcv_socket.bind("ipc:///tmp/test")但是,如果我尝试使用该功能zmq_getsockopt(),它会失败:import zmq.asyncioctx = zmq.asyncio.Context()rcv_socket = ctx.socket(zmq.PULL)rcv_socket.connect("ipc:///tmp/test")socket_path = rcv_socket.getsockopt(zmq.LAST_ENDPOINT)rcv_socket.bind("ipc://%s" % socket_path)然后我得到:zmq.error.ZMQError: No such file or directory for ipc path "b'ipc:///tmp/test'".
查看完整描述

1 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

“......新使用 ZeroMQ,所以我正在努力处理一些代码。”

首先,欢迎来到零之禅的艺术。


如果您从未使用过 ZeroMQ,
您可能会喜欢先看看“ZeroMQ原则在不到五秒内
,然后再深入了解更多细节



好吧,如果您从首先了解游戏规则开始,而不是从崩溃中学习,那么您的情况会好得多(是的,这与“想要传福音的大师”向人群中注入的东西恰恰相反“只是编码”就足够了——它确实不是,因为它确实是一项严肃的业务)

这就是为什么:

如果您阅读已发布的 API,如果您不了解系统的结构并且不了解其内部和外部行为(框架的游戏规则) ,大多数时候它仍然会让您感到困惑:

ZMQ_LAST_ENDPOINT选项应检索绑定到 TCP 和 IPC 传输的最后一个端点。返回值将是 ZMQ DSN 形式的字符串。请注意,如果 TCP 主机是INADDR_ANY,由 a 指示*,则返回的地址将是0.0.0.0(对于 IPv4)。

这说的是重点,但不知道这个概念,它仍然是隐藏的,你看不到它。


最好的下一步

如果你真的认真低延迟 分布式计算,最好的下一步,在阅读上面的链接之后,停止编码并首先花一些时间阅读和理解美妙的 Pieter HINTJENS 的书“Code Connected, Volume 1”,这确实是进一步阅读的必读文章 -绝对值得你所有的时间和努力。

然后,您将看到为什么它永远不会飞:

import zmq.asyncio; ctx = zmq.asyncio.Context()

rcv_socket        = ctx.socket( zmq.PULL )

rcv_socket.connect( "ipc:///tmp/test" )


socket_path = rcv_socket.getsockopt( zmq.LAST_ENDPOINT )


rcv_socket.bind(    "ipc://%s" % socket_path )

而这个可能(但string这里仍然没有处理以 NULL 结尾的字符......这本身就是一个糟糕的软件设计实践和/或自律或两者兼而有之的标志):


import zmq.asyncio; ctx = zmq.asyncio.Context()

rcv_socket        = ctx.socket( zmq.PULL )    

rcv_socket.bind(    "ipc:///tmp/test" )


socket_path = rcv_socket.getsockopt( zmq.LAST_ENDPOINT )


rcv_socket.connect( "ipc://%s" % socket_path )


查看完整回答
反对 回复 2022-10-18
  • 1 回答
  • 0 关注
  • 289 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信