我正在使用Python在Raspberry Pi上编程代理,并且用JavaScript编程了sub.js和pub.js。 pub和sub都经过了测试,可以正常工作,但是代理代码没有反应。
PUSH.js
const{PUSH}= require('./config');
var zmq = require("zeromq"),
sock = zmq.socket("push");
sock.connect("tcp://"+PUSH);
console.log("PUSH connected to port 24041 from the broker");
setInterval(function() {
console.log("PUSH sending to broker");
sock.send("example");//send to broker
}, 500);
SUB.js
const{sub}= require('./config');
var zmq = require("zeromq"),
sock = zmq.socket("sub");
sock.connect("tcp://"+ sub);
console.log("sub connected to port 24042 from the broker");
sock.subscribe(""); //term what sub send
sock.on("message", function (msg) {
//Broker received what pub send
console.log("Broker has received: %s", msg.toString());
});
Output from working broker sending "example"Output from raspberry pi for PUSH.js and PUB.js
使用代理代码,我想从PUSH.js(端口41)接收和打印,然后发送回SUB.js(端口42)。
import zmq
import time
def main():
"""main method"""
# Prepare our context and publisher
context = zmq.Context()
publisher = context.socket(zmq.PUSH)
subscriber = context.socket(zmq.SUB)
publisher.connect("tcp://address:42")
subscriber.connect("tcp://address:41")
subscriber.setsockopt(zmq.SUBSCRIBE, b"example")
while True:
#print received contents from port 41
[address, contents] = subscriber.recv_multipart()
print("[%s] %s" % (address, contents))
#send received contents from port 42
publisher.send_multipart([address, contents])
# We never get here but clean up anyhow
publisher.close()
subscriber.close()
context.term()
if __name__ == "__main__":
main()
输出代理:没有打印
如果从未使用过ZeroMQ,在这里您可以先看看"ZeroMQ Principles in less than Five Seconds",然后再深入研究更多细节]]
1]
确保端口号匹配-41 != 24041
/42 != 24042
2]确保每个链接至少有一个.bind()
节点,而所有其他.connect()
都指向该地址/端口,以使b PUB/SUB
和PUSH/PULL
原型确实可以协同工作3]确保遵循ZeroMQ发布的API并避免设置不兼容,例如尝试绑定PUSH/PUSH
。