[英]ZeroMQ Python Subscription works, NodeJS Subscription does not on same publisher
我正在尝试订阅发布订阅服务器。 使用Python进行操作时,没有问题,它的工作与预期的一样。 但是,当我尝试使用NodeJS ZMQ预订完全相同的服务器时,没有任何反应。 我不知道哪里出了问题,可能是在订阅部分?
蟒蛇:
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示例中的按消息传递部分永远不会触发。 当我运行一个简单的NodeJS发布者时,订阅者会按预期工作。
请注意,由于我为ZeroMQ消息运行了一些本地分发工具,因此我连接到的地址是本地IP。
NodeJS脚本的行为与同一发布源上的Python脚本不同,这两个脚本之间有什么区别?
两者都使用ZeroMQ 4。
编辑:根据杰森的建议,我会发布一些发布者的代码。 但是因为这是第三方,所以我没有代码。 但是,当我启动一个简单的Python发布者时,订阅者的行为与在第三方发布者上的行为相同。
简单的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订阅服务器无关。
固定。
删除node_modules并通过npm install zmq重新安装。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.