【问题标题】:zeromq.js - Await connectionzeromq.js - 等待连接
【发布时间】:2025-12-16 18:35:02
【问题描述】:

documentationconnect 方法说,

连接到给定远程地址的套接字并立即返回。连接将在后台异步进行。

但是,await 似乎并不适用,如他们的订阅者代码示例所示。

subscriber.js

const zmq = require("zeromq")

async function run() {
  const sock = new zmq.Subscriber

  sock.connect("tcp://127.0.0.1:3000") //Happens async; can we await this?
  sock.subscribe("kitty cats")
  console.log("Subscriber connected to port 3000")

  for await (const [topic, msg] of sock) {
    console.log("received a message related to:", topic, "containing message:", msg)
  }
}

run()

另外,connect() 方法可能引发什么错误?我提供了一个“淫秽”端口号,例如8124000,用于连接。我希望提出一些错误消息。

【问题讨论】:

    标签: node.js sockets tcp zeromq publish-subscribe


    【解决方案1】:

    Qconnect() 方法可能引发什么错误?”


    错误部分

    ZeroMQ 原生 API 区分(自 v2.1 以来未更改)这些错误:

    EINVAL
    提供的端点无效。
    EPROTONOSUPPORT
    请求的传输协议不受支持。
    ENOCOMPATPROTO
    请求的传输协议与套接字类型不兼容。
    ETERM
    与指定套接字关联的 ØMQ 上下文已终止。
    ENOTSOCK
    提供的套接字无效。
    EMTHREAD
    没有可用于完成任务的 I/O 线程。

    然而你的实际观察者依赖于 zeromq.js 重新包装这些主要状态,所以最好的下一步是重新阅读包装器源代码,以便了解这些原生 API 错误状态实际上是在 zeromq.js-wrapper 中处理的。

    备注:

    可以生成以下套接字事件。根据所使用的 ZeroMQ 版本,此列表可能会有所不同。

    请注意,错误事件是通过设计避免的,因为这在 Node.js 中具有特殊行为,如果未处理,则会引发异常。

    其他错误名称已调整为尽可能接近 Node.js 中其他网络相关事件名称和/或相应的 ZeroMQ.js 方法调用。与特定操作相对应的事件(包括任何错误)以冒号 : 命名,例如bind:errorconnect:retry

    不过还是很警告,不是吗?


    await 部分

    MCVE-code ( as-is ) 无法重现实时会话,因此最好调整 MCVE 代码以使其可运行,我们可以继续进行此操作。

    【讨论】: