我有这个ZeroMQ消息在我的C应用程序中发送代码
void *socket= zmq_socket (context, ZMQ_DEALER);
// ...
zmq_msg_t zmsg;
zmq_msg_init_size (&zmsg, msg_size);
memcpy(zmq_msg_data (&zmsg), content, msg_size);
zmq_msg_send (&zmsg, socket, 0);
zmq_msg_close(&zmsg);
sleep (1);
实际上有效,但我不喜欢我必须调用sleep(1)来清除消息。如果我离开它,没有消息到达服务器。还有其他可能性" flush"在不调用睡眠的情况下输出套接字上的消息?我使用ZeroMQ v3.2.2。
非常感谢!
编辑:此行为似乎仅在调试模式下发生。
答案 0 :(得分:1)
尝试将ZMQ_LINGER
套接字选项设置为0,然后在关闭消息后关闭套接字。
zmq_setsockopt(socket, ZMQ_LINGER, 0, sizeof(int));
...
zmq_close(socket);
答案 1 :(得分:1)
始终确保关闭套接字并终止上下文。在没有尚未发送的消息之前,zmq_term()
将不会返回。您可以在套接字上设置LINGER,以指定在丢弃消息之前等待多长时间的上限。默认行为是永远等待。
void *socket= zmq_socket (context, ZMQ_DEALER);
// ...
zmq_msg_t zmsg;
zmq_msg_init_size (&zmsg, msg_size);
memcpy(zmq_msg_data (&zmsg), content, msg_size);
zmq_msg_send (&zmsg, socket, 0);
zmq_msg_close(&zmsg);
zmq_close(socket);
zmq_term(context); // this will block until the message is actually sent