【问题标题】:zmq_getsockopt error : zmq.error.ZMQError: No such file or directory for ipc pathzmq_getsockopt 错误:zmq.error.ZMQError:ipc 路径没有这样的文件或目录
【发布时间】:2020-04-21 14:47:00
【问题描述】:

我是使用 ZeroMQ 的新手,所以我正在为一些代码而苦恼。

如果我执行以下代码,则不会显示错误:

import zmq.asyncio
ctx = 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.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)

然后我得到:

zmq.error.ZMQError: No such file or directory for ipc path "b'ipc:///tmp/test'".

【问题讨论】:

    标签: python zeromq pyzmq


    【解决方案1】:

    “...新使用 ZeroMQ,所以我苦苦挣扎使用一些代码。”

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


    如果您从未使用过 ZeroMQ,
    您可以在这里先看看 "ZeroMQ Principles in less than Five Seconds"
    在深入了解更多细节之前



    嗯,如果你首先了解游戏规则,而不是从崩溃中学习(是的,与“想要- evangelisation-gurus”向人群宣传“仅仅编码”就足够了——这确实不是,因为它确实是一项严肃的业务)

    这就是为什么:

    如果您阅读已发布的 API,如果您您不了解系统的结构并且不了解其内部和外部行为(框架的游戏规则):

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

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


    最好的下一步

    如果你真的对很认真,那么最好的下一步,在阅读完上面的链接后,停止编码,先花点时间阅读和理解Pieter HINTJENS的精彩书籍“Code Connected,第 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 )
    

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

    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 )
    

    【讨论】:

    • 哇,这真的很有帮助,在继续之前我需要做一些阅读。谢谢你的回答。
    • 评论的措辞似乎是为了吓跑人们,而不仅仅是解释
    猜你喜欢
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 2022-11-04
    • 2013-11-01
    • 1970-01-01
    • 2019-08-24
    • 2020-05-31
    • 1970-01-01
    相关资源
    最近更新 更多