在ZMQ zguide中,他们advice在任务结束时始终清理。 关于最佳实践,我有点困惑。
首先
Q1:在销毁上下文之前,我是否需要关闭所有套接字?
Q2:所以我需要破坏上下文吗?
查看 context.destroy()
,我看到它在每个套接字上都会调用并关闭。
问题3:我该如何终止我的ZMQ资源?
修改
如果我查看jeromq代码 - 我在 ZContext.destroy
里面看到了
<{1}}(每个套接字)
destroySocket
然后它甚至会调用s.setLinger( linger );
s.close();
sockets.remove( s );
和sockets.clear();
问题4:这还够吗?
答案 0 :(得分:0)
A1:是的,但是......
A2:是的,但是......
A3:遵循ZeroMQ最佳实践,不要只依赖语言绑定
A4:参考。 A3
首先,人们应该意识到,ZeroMQ有一套内部架构原则,任何人都不应该明知或不小心违反。
也就是说,人们也可以意识到,不同的语言绑定(它不是ZeroMQ,而是与内部体系结构规则外部关联的其他一些代码包装器)可能在编排gracefull终止时遇到问题(并且一些包装器隐藏了这个在引擎盖下,以便用户不知道那里会发生什么。)
无尽的挂起.bind()
- s到localhost端口和陷入死锁的线程只是一些可能因资源释放不足而面临的麻烦。终止练习。
.close()
.term()
ZMQ上下文实例广告1)非阻止表示一个必须采取适当的谨慎 .setsockopt()
参数,类似于ZMQ_LINGER
,以避免死亡-lock(s)让ZMQ-socket原型在预期中无休止地等待,相反的对手可能仍然有一些消息要接收,所以在这一步要小心和有条理。在调用.close()
之前设置所有安全退出参数。否则你失去了控制进入阻止模式。