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