我的C应用程序中有此ZeroMQ消息发送代码
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)刷新消息这一事实。如果我不理会任何消息,则不会到达服务器。还有其他可能性可以在不调用sleep的情况下“清空”套接字上的消息吗?我使用ZeroMQ v3.2.2。
非常感谢你!
编辑:此行为似乎仅在 Debug模式下发生。
最佳答案
始终确保关闭套接字并终止上下文。直到没有未发送的消息时,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