首页 > 解决方案 > ZeroMQ:Python 服务器到 C++ 客户端

问题描述

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

    zmq::context_t context{1};
    zmq::socket_t socket{context, 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++ 服务器对其进行测试,代码略有不同)但在这里不起作用。到目前为止隔离程序以确定问题来自此代码块。

标签: pythonc++zeromqpyzmq

解决方案


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

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

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


推荐阅读