You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中ZeroMQ与Python服务通信如何配置明文认证凭据?

Node.js ZeroMQ Subscriber 明文认证配置正确方法

核心问题修正

  • Socket角色错误:Subscriber是订阅端,需用connect()连接到Python发布者的地址,而非bind()(bind()是发布者/服务端的专属操作)。
  • 认证参数设置方式错误:ZeroMQ的PLAIN明文认证参数不能通过构造函数传入,必须使用socket的set()方法配置。

正确代码示例

Node.js 订阅端代码

const zmq = require('zeromq');

async function initSubscriber() {
  // 创建Subscriber套接字
  const subscriber = new zmq.Subscriber();

  // 配置明文认证参数
  subscriber.set('plain_username', 'username');
  subscriber.set('plain_password', 'password');

  // 连接到Python发布者的监听地址
  await subscriber.connect('tcp://127.0.0.1:50080');

  // 订阅所有主题(若需指定主题,替换为空字符串为对应主题内容)
  await subscriber.subscribe('');

  console.log('订阅端已连接并完成订阅');

  // 循环接收消息
  for await (const [topic, content] of subscriber) {
    console.log(`收到主题[${topic}]的消息:${content}`);
  }
}

// 启动订阅端并处理异常
initSubscriber().catch(err => console.error('订阅端异常:', err));

对应Python发布端配置(需开启PLAIN认证)

import zmq
import time

context = zmq.Context()
publisher = context.socket(zmq.PUB)

# 启用PLAIN认证服务端模式
publisher.plain_server = True
# 设置允许的用户名和密码(需为字节类型)
publisher.plain_username = b'username'
publisher.plain_password = b'password'

# 绑定监听地址
publisher.bind("tcp://127.0.0.1:50080")

# 模拟发布消息
while True:
    publisher.send_multipart([b"test_topic", b"Hello from Python Publisher"])
    time.sleep(1)

关键说明

  • 确保使用最新版zeromq包(而非旧版zmq),可通过npm install zeromq安装。
  • Subscriber对象本身是不可扩展的,因此无法通过构造函数添加额外属性,必须用set()方法设置套接字选项。
  • 认证参数需和Python发布端配置完全一致,包括用户名密码的大小写、类型匹配(Node.js端用字符串,Python端用字节)。

内容的提问来源于stack exchange,提问作者Angel Hadzhiev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 14:27:23