c - 关闭 0MQ 套接字之前休眠

标签 c messaging zeromq

在 Code Connected 书籍第 1 卷(第 23 页)中,有一个使用 PUSHPULL 消息传递的示例。在关闭套接字之前,它使用sleep()。这是代码:

printf("Total expected cost: %d msec\n", total_msec);
sleep(1); // Give 0MQ time to deliver

zmq_close(sink);
zmq_close(sender);
zmq_ctx_destroy(context);

sleep(1) 是关于什么的?这是一般规则吗?

最佳答案

taskvent.c 和tasksink2.c 中的sleep (1) 是示例仍使用0MQ/2.2 时的遗留问题,如果您在0MQ/3.2 上运行,则可以删除这两行代码。我刚刚完成了该操作并进行了测试,它的工作原理正如您所期望的那样。

原因:在 2.2 中,当您终止上下文时,套接字会被破坏,消息也会被丢弃。在 3.2 中,消息将在 LINGER 套接字选项指定的超时内传递,默认情况下是无限的。

还有很多其他使用“sleep”的例子,这是有充分理由的:

  • 模拟工作负载
  • 让演示中的一组对等点启动并连接
  • 让演示中的一组对等点关闭
  • 出现错误后重试

您可以以不同的方式进行启动和关闭同步,但它会比我们在简单示例中想要的更复杂。

关于c - 关闭 0MQ 套接字之前休眠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14394994/

相关文章:

c++ - ZeroMQ:如何对 EINTR 上的不同信号类型使用react

c - 如何正确使用zmq_msg_more?

c - C中的基本脚本(字符串显示)

c - printf ("-") 和 printf ("-\n");

c# - 如何防止控件更改 Z 顺序?

sockets - ZeroMQ 绑定(bind) API zmq_bind() 到 127.0.0.1 :5555 returns error 19

c - 如何改进 AVX/SSE 的 Mersenne Twister?

c - 如果变量不在函数的顶部,则禁用变量声明

azure - Azure 事件网格可以为我提供这样的 FIFO 行为吗?

java - RabbitMQ 到 BlockingQueue 的绑定(bind)