Брокер по Raspberry Pi с Python - PullRequest
0 голосов
/ 15 апреля 2020

Я программирую брокера на своем Raspberry Pi с помощью Python, и у меня есть подпрограмма. js и pub. js, запрограммированные в JavaScript. Паб и саб проверены и работают правильно, но код брокера не реагирует.

PU SH. 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());
});

Вывод от работающего брокера, отправляющего "пример" Вывод из Raspberry Pi для PU SH. js и PUB. js

С кодом брокера, который я хочу получить и распечатать из PU SH. 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()

выходной брокер: ничего не печатать

1 Ответ

0 голосов
/ 16 апреля 2020

В случае, если кто-то никогда не работал с ZeroMQ,
здесь можно с первого взгляда посмотреть на "ZeroMQ Принципы менее чем за Пять секунд"
, прежде чем углубляться в детали



1) , убедитесь, что номера портов совпадают - 41 != 24041 / 42 != 24042
2) убедитесь, что каждая ссылка имеет хотя бы один .bind() -узел и все остальные .connect() на этот один адрес / порт, поэтому чтобы оба архетипа PUB/SUB и PUSH/PULL действительно работали вместе
3) следуйте опубликованному API ZeroMQ и избегайте несовместимости настройки, как попытка связать PUSH/PUSH.

...