繁体   English   中英

ZeroMQ Python订阅有效,NodeJS订阅不在同一发布者上

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM