1 回答
TA贡献1815条经验 获得超12个赞
问:“这样的实施可能会出现什么问题?”
.poll()
由于仅使用&.recv()
方法的阻塞形式,这种实现很容易出现死锁并失败在多个对等点连接到实现循环传入/传出流量映射的接入点的情况下,这种实现的自我防御能力不够
.recv()
这种实现方式是非常错误的,因为在这种情况下,只调用一个单独的代码.send_multipart()
是非常错误的,在这种情况下,会发出惊人的警告,需要进行多部分消息处理ipc://
Transport Class 很容易隐藏与操作系统相关的用户级代码限制(由操作系统对路径名的格式和长度以及对 R/W/X 的有效用户权限进行设置)ipc://
对于 O/S 服务尚未创建目标地址的情况,传输类.connect()
方法的使用取决于顺序(.bind()
需要首先成功)最后但并非最不重要的一点是,任何
.bind()
对同一ipc://
传输类目标的下一次尝试都会默默地破坏您ROUTER
对消息传递/信令平面基础设施的预期访问,并且您的实现已经花费了零努力来自我保护和自我诊断错误,这些错误可能会默默地发生出现在“幕后”
Zeromq 不应该自动处理死锁吗?我尝试使用zeromq指南mspoller中给出的示例如果我不能同时使用.poll()和recv(),我应该如何使用ZMQ Poller结构?– hao123
不,
ZeroMQ zen-of-zero 注重性能+低延迟,因此请考虑将预防阻塞的所有应有注意都掌握在您自己的手中(根据需要和需要的地方,核心库永远不会比实现几乎线性可扩展性能的目标所需的)。
不,
自由使用.poll()
- 和 -.recv()
方法,但完成它以适应非阻塞方式 -.poll( 0 )
并添加主动检测+多部分消息的处理(再次,最好以非阻塞方式,使用zmq.NOBLOCK
选项标志,其中合适的 )。自阻塞会使代码失控。
添加回答
举报