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