簡體   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