【发布时间】:2017-10-08 03:12:35
【问题描述】:
我正在使用 ZMQ 允许客户端连接到服务器并向其发送命令。命令进来的频率很高,不需要任何回复。我正在考虑使用 REQ/REP 套接字,但发送空回复感觉很浪费。我不想使用 PUB/SUB 或 PUSH/PULL,因为我希望客户端启动连接。有没有比 REQ/REP 更合适的模式在这里使用?
【问题讨论】:
标签: zeromq
我正在使用 ZMQ 允许客户端连接到服务器并向其发送命令。命令进来的频率很高,不需要任何回复。我正在考虑使用 REQ/REP 套接字,但发送空回复感觉很浪费。我不想使用 PUB/SUB 或 PUSH/PULL,因为我希望客户端启动连接。有没有比 REQ/REP 更合适的模式在这里使用?
【问题讨论】:
标签: zeromq
(cit.:) 因为我希望客户端启动连接。 (?)
总是可以让客户端发起连接,所以使用 PUSH/PULL 可扩展的正式通信模式似乎非常合适,即使使用反向 .bind()/.connect() 调用,还是您的意思是别的?
如果出于某种其他原因对PUSH/PULL(目前观察到的)保持负面态度,人们可能会摆脱严格的硬连线步锁(以及陷入无法挽救的死锁的风险,与它本身相关) )的REQ/REP
--首先
通过扩展原型XREQ/XREP(有关实现细节,请参阅 API 文档)
或
(如果使用 API 4.2+ )
通过 .setsockopt( ZMQ_REQ_RELAXED, 1 ) 解锁 REQ-hardwired FSA 职责,鉴于上述事实,REP 的答案永远不会从服务器端/在REQ 端客户端上处理。如果采用这种方式,请小心,因为ZMQ_REQ_CORRELATE 可能会设置为 1,其中消息将恰好变为多帧(d),因为REQ-id# 将被加载到新注入的“服务”帧中,在REQ 的客户端有效负载进入网络之前。这可能会混淆消息接收/处理代码的服务器部分。
对于更勇敢的设计师,可以使用 PAIR/PAIR 正式模式原型,因为它不会灌输任何严格的正式行为,但请仔细阅读 API 规范。
【讨论】: