首页 > 解决方案 > zeromq.js - 等待连接

问题描述

方法的文档connect说,

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

但是,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.jssocketstcpzeromqpublish-subscribe

解决方案


“该方法可能引发什么错误connect()?”


错误部分

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

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

ENOCOMPATPROTO

ETERM

ENOTSOCK

EMTHREAD

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

备注:

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

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

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

尽管如此,还是非常警告,不是吗?


await部分

MCVE 代码(原样)无法重现实时会话,因此最好调整 MCVE 代码以使其能够运行,我们可以继续进行下去。


推荐阅读