首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >消息CPPZMQ - JeroMQ -- PyZMQ的ZeroMQ语言间翻译

消息CPPZMQ - JeroMQ -- PyZMQ的ZeroMQ语言间翻译
EN

Stack Overflow用户
提问于 2017-06-30 07:37:21
回答 2查看 372关注 0票数 1

在C++ ZMQ发布程序中,我将字符串打包到message_t中,如下所示:

代码语言:javascript
复制
int main()
{
     zmq::context_t context(1);
     zmq::socket_t socket(context, ZMQ_PUB);
     socket.bind("tcp://*:5555");
     socket.setsockopt(ZMQ_CONFLATE, 1);
     std::cout << "Server Up and Sending\n";
     while(true)
     {
          std::string str = "Hello from C++!";
          zmq::message_t msg(str.data(), str.length());
          bool ret = socket.send(msg);
          if(ret)
          {
               std::cout << "Sending\n";
          }
     }
     return 0;
}

我正在尝试弄清楚如何在JeroMQ (Java ZMQ)中接收;到目前为止,我得到的是:

代码语言:javascript
复制
  ZMQ.Context context = ZMQ.context(1);
  ZMQ.Socket socket = context.socket(ZMQ.SUB);
  socket.connect("tcp://localhost:5555");
  socket.subscribe("".getBytes());
  while(true)
  {
        String msg = socket.recvStr();
        System.out.println(msg);
  }

同样在PyZMQ (Python ZMQ)中:

代码语言:javascript
复制
import zmq

context = zmq.Context()
socket = context.socket(zmq.SUB)
address = 'tcp://localhost:5555'
socket.connect(address)
socket.setsockopt_string(zmq.SUBSCRIBE, unicode(''))

print "start"
print "connecting to ", address

while True:
    try:
        msg = socket.recv_string()
        print msg

但是,无论是我JeroMQ尝试还是我的PyZMQ尝试都不会收到字符串消息。

EN

回答 2

Stack Overflow用户

发布于 2018-07-31 03:16:51

尝试使用pyzmq订阅此代码片段

代码语言:javascript
复制
import zmq
import time

port = "5555"

context = zmq.Context()
socket = context.socket(zmq.SUB)

socket.setsockopt(zmq.SUBSCRIBE, '')
socket.setsockopt(zmq.CONFLATE, 1)  # last msg only.
socket.connect("tcp://localhost:%s" % port)  # must be placed after above options.

while 1:
    time.sleep(1)
    data = socket.recv()
    print data

笔记

如果不起作用,请在您的C++ ZeroMQ publisher中删除以下行:

socket.setsockopt(ZMQ_CONFLATE, 1);

票数 0
EN

Stack Overflow用户

发布于 2018-07-31 18:15:11

您正在发送一个C字符串(没有null结尾)。

您正在尝试接收python或java字符串。

它们可能不兼容,并且recvStr / recv_string可能正在阻塞,等待字符串结束位置的详细信息。

只需使用标准的recv函数(而不是字符串版本)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44836564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档