node.js - 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
, 来连接。我希望提出一些错误消息。
解决方案
问:“该方法可能引发什么错误
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:error
或connect:retry
。
尽管如此,还是非常警告,不是吗?
该await
部分
MCVE 代码(原样)无法重现实时会话,因此最好调整 MCVE 代码以使其能够运行,我们可以继续进行下去。
推荐阅读
- python - 如何在二进制转换程序中的python中每4位之后创建一个空格
- c - 为什么在我的 C 程序中使用 Exec 函数无法杀死进程?
- java - 如何在 Spring Boot 中创建 rabbitmq 队列但不使用 @Bean
- c++ - 如何在 Visual Studio Code 中链接到使用 Homebrew 下载的库?
- api - 收到错误 401 Unauthorized: 标头中缺少承载身份验证
- javascript - 将 Javascript 数组嵌套到 JSON 中
- python-2.7 - Jenkins 构建失败并出现 OSError:[Errno 2] 没有这样的文件或目录
- typescript - 如何在上下文 api typescript 中描述传入的状态和动作?
- python - 如何在可步行的路径上找到两点之间的路径
- algorithm - 计算尺寸等级