c++ - 如何在 C++ 和 ZMQ 中正确使用多线程

标签 c++ zeromq

我正在用 C++ 在核心模块之间传递一些消息,它必须与 Python 模块和图形接口(interface)进行通信

我正在按照以下方式使用 ZMQ 进行消息传递:

int main()
{
    context_t context(1);
    socket_t publisher(context, ZMQ_PUB);
    publisher.bind("tcp://127.0.0.1:50000");
//This sockets takes charge of the python publishing
    socket_t send_py(context, ZMQ_SUB);
    send_py.bind("tcp://127.0.0.1:5557");
    socket_t receive_py(context, ZMQ_SUB);
    receive_py.connect("tcp://127.0.0.1:5558");
    receive_py.setsockopt(ZMQ_SUBSCRIBE, NULL, 0);
    zmq::message_t control_signal(sizeof(float));
    zmq::message_t control_signal_second(sizeof(float));
    cout<<"flag"<<endl;
    publisher.send(control_signal);
    cout<<"flag_1"<<endl;
    send_py.send(control_signal_second);
    cout<<"flag_2"<<endl

}

我已经对这些地址进行了研究,而且我确定这些端口是打开的。

代码编译,但我得到以下输出:

flag
flag_1
terminate called after throwing an instance of 'zmq::error_t'
  what():  Operation not supported
Aborted (core dumped)

正在正确发布其中之一,但没有让 send_pyu.send 工作。

非常感谢

最佳答案

看来您已将 send_py 定义为订阅者:

socket_t send_py(context, ZMQ_SUB);
send_py.bind("tcp://127.0.0.1:5557");

..但您正试图在其上发送数据,这是无效且不受支持的;订阅者接收,他们不发送数据。

send_py.send(control_signal_second);

如果您需要发送数据,请使用 PUBPUSH 或其他一些套接字类型,但 SUB 不能与 发送();它将抛出 Operation Not Supported

关于c++ - 如何在 C++ 和 ZMQ 中正确使用多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18218511/

相关文章:

python - 如何将数据序列化为 C++ zmq 客户端和 Python zmq 服务器之间的通信

Python ZeroMQ 广播消息

c++ - 引用指针的可选参数?

c++ - 使用 GCC 依赖文件导致 Make 每次都完全重建项目

node.js - 我应该如何处理同一主机上同一端口上的多个发布者?

java - 使用 jeroMQ 进行推送

erlang - 为什么或何时应该在 Erlang 中使用 RabbitMQ、ZeroMQ 等消息队列?

C++ 单例 GetInstance() 返回

c++ - 如何在没有内存泄漏的情况下同时(线程安全)填充 c++11 std::map<std::string,std::bitset<N>*>?

c++ - 引用 Qt C++ Project 中包含的库