簡體   English   中英

如何在Python發布者和C ++訂閱者之間實現簡單的ZeroMQ Pub-Sub通信?

[英]How to implement simple ZeroMQ Pub-Sub communication between Python publisher and C++ subscriber?

我是ZMQ的新手,並試圖在Python發布者和C ++訂閱者之間實現簡單的Pub-Sub通信。 在官方文檔之后,我提出了以下代碼:

Python發布者

import zmq
import datetime

context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://127.0.0.1:5555")

while True:
    now = datetime.datetime.now()
    nowInMicroseconds = str(now.microsecond)
    socket.send_string(nowInMicroseconds)
    print("sending time in microseconds")

C ++訂戶

#include <zmq.hpp>
#include <iostream>

int main ()
{
    zmq::context_t context (1);
    zmq::socket_t subscriber (context, ZMQ_SUB);
    subscriber.connect("tcp://127.0.0.1:5555");
    subscriber.setsockopt(ZMQ_SUBSCRIBE, "");

    while(true) {   
        std::cout << "Getting data" << std::endl;
        zmq::message_t update;
        subscriber.recv(&update);
        std::cout << "Data received" << std::endl;

    }
}

但是,當我運行代碼時,我不會從Python接收任何數據。 我做錯了什么?

編輯

建議使用帶Python訂閱服務器的user3666197運行Python Publisher。 與C ++訂閱服務器一起運行C ++ Publisher的工作方式類似於charm。

首先,讓我們隔離問題:

在python中還創建.connect()另一個訂閱者:

import zmq
import datetime

pass;      Pcontext = zmq.Context()
Psocket  = Pcontext.socket( zmq.SUB )

Psocket.connect( "tcp://127.0.0.1:5555" )

Psocket.setsockopt( zmq.LINGER,     0 )
Psocket.setsockopt( zmq.SUBSCRIBE, "" )
Psocket.setsockopt( zmq.CONFLATE,   1 )

while True:
    print( "{1:}:: Py has got this [[[{0:}]]]".format( Psocket.recv(),
                                                       str( datetime.datetime.now()
                                                            )
                                                       )
            )

如果這按預期工作,則問題不在發送方。 如果失敗,則可以在不同平台上檢查正確的訂閱字符串處理問題(在Py 3+上期望u'' )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM