ZeroMQ Python 订阅有效,NodeJS 订阅不在同一个发布者上
Posted
技术标签:
【中文标题】ZeroMQ Python 订阅有效,NodeJS 订阅不在同一个发布者上【英文标题】:ZeroMQ Python Subscription works, NodeJS Subscription does not on same publisher 【发布时间】:2015-07-08 19:14:37 【问题描述】:我正在尝试订阅发布-订阅服务器。 使用 Python 执行此操作时没有问题,它按预期工作。 但是,当我尝试使用 NodeJS ZMQ 订阅完全相同的服务器时,什么也没有发生。 我不知道哪里出了问题,可能是在订阅部分?
Python:
from gzip import GzipFile
from cStringIO import StringIO
import zmq
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://127.0.0.1:6701")
socket.setsockopt(zmq.SUBSCRIBE, '')
while True:
multipart = socket.recv_multipart()
address = multipart[0]
contents = ''.join(multipart[1:])
contents = GzipFile('','r',0,StringIO(contents)).read()
print("[%s] %s\n" % (address, contents))
socket.close()
context.term()
NodeJS:
var zmq = require('zmq')
, sock = zmq.socket('sub');
sock.connect('tcp://127.0.0.1:6701');
sock.subscribe('');
console.log('Subscriber connected to port 6701');
sock.on('message', function(topic, message)
console.log('received a message related to:', topic, 'containing message:', message);
);
NodeJS 示例中的 on-message 部分永远不会被触发。 当我运行一个简单的 NodeJS 发布者时,订阅者会像预期的那样工作。
请注意,我连接的地址是本地 IP,因为我为 ZeroMQ 消息运行了一些本地分发工具。
NodeJS 脚本在同一发布源上的行为与 Python 脚本不同,这两个脚本之间有什么区别?
两者都使用 ZeroMQ 4。
编辑: 正如 Jason 所建议的,我会发布一些发布者的代码。但是因为这是第 3 方,所以我没有那个代码。但是当我启动一个简单的 Python 发布者时,订阅者的行为与他们在 3rd 方发布者上的行为相同。
简单的 Python 发布者:
import zmq
import random
import sys
import time
port = "6701"
if len(sys.argv) > 1:
port = sys.argv[1]
int(port)
context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://*:%s" % port)
while True:
topic = random.randrange(9999,10005)
messagedata = random.randrange(1,215) - 80
print "%d %d" % (topic, messagedata)
socket.send("%d %d" % (topic, messagedata))
time.sleep(1)
NodeJS 发布者:
var zmq = require('zmq')
, sock = zmq.socket('pub');
sock.bindSync('tcp://127.0.0.1:6701');
console.log('Publisher bound to port 3000');
setInterval(function()
console.log('sending a multipart message envelope');
sock.send(['kitty cats', 'meow!']);
, 500);
NodeJS 发布者与 Python 和 NodeJS 订阅者一起工作,但 Python 发布者只与 Python 订阅者一起工作,而不是 NodeJS 订阅者。
【问题讨论】:
只是想消除变量,你能显示你的python发布者和节点发布者的相关代码吗? 【参考方案1】:已修复。
删除 node_modules 并通过 npm install zmq 重新安装。
【讨论】:
以上是关于ZeroMQ Python 订阅有效,NodeJS 订阅不在同一个发布者上的主要内容,如果未能解决你的问题,请参考以下文章