我是ZMQ的新手,并尝试在Python发布者和C ++订阅者之间实现简单的Pub-Sub通信。根据官方文档,我提出了这些代码:
Python Publisher
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订阅者运行Python Publisher user3666197
建议工作得很好。使用C ++订阅服务器运行C ++ Publisher就像魅力一样。
答案 0 :(得分:1)
在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''
)。