在 Code Connected 书籍第 1 卷(第 23 页)中,有一个使用 PUSH
、PULL
消息传递的示例。在关闭套接字之前,它使用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/