设置ZMQ_ROUTING_ID原因recv无法与cppzmq一起使用

问题描述

ITNOA

嗨,

我有如下所示的客户端套接

       string address = "tcp://";
       address += ip_address;
       address += ":";
       address += to_string(port);

       socket = new zmq::socket_t(get_context_instance(),ZMQ_DEALER);

       set_socket_linger_period();

       // A random id will be used if id is not set
       if (id != "") socket->set(zmq::sockopt::routing_id,id);

并使用如下所示的套接字发送消息

        zmq::message_t zmq_message(message_size);
        memcpy(zmq_message.data(),message,message_size);

        return socket->send(zmq_message);

并具有如下所示的服务器套接

        string endpoint = "tcp://";
        endpoint += interface_name;
        endpoint += ":";
        endpoint += to_string(port);

        socket = new zmq::socket_t(get_context_instance(),ZMQ_ROUTER);

并从如下所示的服务器套接字接收

        zmq::message_t id;
        if (!socket->recv(&id,0)) return 0;
        last_caller_id = string(static_cast<char*>(id.data()),id.size());

        zmq::message_t reply;
        if (!socket->recv(&reply,0)) return 0;

我的问题是,当id未设置(空字符串)时,发送和接收工作正常,但是当我将id设置为诸如"FOO_BAR_ID"之类的字符串时,接收方法不起作用并且前recv(id的接收)未完成并阻止无限。

所以我的问题是,我的问题是什么以及如何解决这个问题?

我在Ubuntu 20.04.1上使用最新版本的cppzmq和libzmq 4.3.2

非常感谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)