ZeroMQ:Python 服务器到 C++ 客户端

Posted

技术标签:

【中文标题】ZeroMQ:Python 服务器到 C++ 客户端【英文标题】:ZeroMQ: Python Server to C++ Client 【发布时间】:2021-11-04 05:20:47 【问题描述】:

目前正在开发一个 Python 到 ZMQ 程序;到目前为止,这就是我为 c++ 客户端所拥有的:

    zmq::context_t context1;
    zmq::socket_t socketcontext, zmq::socket_type::req;
    socket.connect("tcp://IPADDRESSPLACEHOLDERTEXT:51000");
    const std::string data"Message";
     
    zmq::message_t reply;
    socket.recv(reply, zmq::recv_flags::none);
    char CHAR[10];
    memcpy(CHAR, zmq_msg_data(&reply), 9);
    CHAR[10] = '\0';

    std::cout << “RESULT: " << CHAR << "," << std::endl;

    return 0;

但是,当我运行完整的 Qt 程序时,它会崩溃。 ZMQ 本身可以工作(使用 c++ 服务器对其进行测试,代码略有不同)但在这里不起作用。到目前为止隔离程序以确定问题来自此代码块。

【问题讨论】:

【参考方案1】:

问: ...在这里不起作用

A :是的,它不能在这里工作。 ZeroMQ REQ-Scalable-Formal-Communications-Pattern 原型(通常“对抗”其匹配对应物,例如在REQ/REP-channel 设置中)永远不会开始等待接收“答案” -message(通常来自REP-peer,但在此之前从未询问并传递过“问题”消息)。代码挂起,等待永远不会以这种方式传递的答案。

一旦您修复代码以使 REQ-instance 首先“询问”,然后使用 socket.send( aQuestionMESSAGE, zmq::send_flags::none);,然后“等待”, 无论是轮询还是监听(无论是使用非阻塞形式的阻塞),ZeroMQ 都会处理 REQ/REP-archetype 中“交错”两步舞的其余部分:跳舞问- Listen-Ask-Listen-Ask-Listen-... 在REQ-side,而在REP-side 跳舞 Listen-Reply-Listen-Reply-Listen-...

【讨论】:

以上是关于ZeroMQ:Python 服务器到 C++ 客户端的主要内容,如果未能解决你的问题,请参考以下文章

为啥 ZeroMQ 服务器没有收到来自客户端的任何请求?

Metatrader 5绑定ZeroMQ / Python

如何在 C++ 中使用 ZeroMQ 通信多个图像?

ZeroMQ:如何实现客户端通知?

Python GUI 未捕获 zeromq 消息

ZeroMQ REQ/REP 如何处理多个客户端?