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 )
添加回答
举报