无回复请求的 ZMQ 模式

Ale*_*int 5 zeromq

我使用 ZMQ 允许客户端连接到服务器并向其发送命令。命令传入的频率很高,不需要任何回复。我正在考虑使用 REQ/REP 套接字,但发送空回复感觉很浪费。我不想使用 PUB/SUB 或 PUSH/PULL,因为我希望客户端启动连接。是否有比 REQ/REP 更适合在这里使用的模式?

use*_*197 2

(引用:)因为我希望客户端发起连接。(?)

人们总是可以让客户端发起连接,因此使用PUSH/PULL可扩展的正式通信模式似乎非常符合目标,即使是反向.bind()/.connect()调用,还是您有其他意思?

如果PUSH/PULL出于某种其他原因对(到目前为止观察到的)保持负面态度,则可能会逃避严格的硬连线步进锁定(以及陷入与本身相关的不可挽救的死锁的风险)——第REQ/REP
一个
通过扩展原型XREQ/XREP(请参阅 API 文档了解实现细节)

(如果使用 API 4.2+)
通过解锁REQ-hardwired FSA 职责.setsockopt( ZMQ_REQ_RELAXED, 1 ),考虑到上述事实,REP答案永远不会从服务器端发送/在服务器上处理REQ端客户端。如果采用这种方式,请小心,因为ZMQ_REQ_CORRELATE可能会设置为 1,其中消息将碰巧变成多帧(d),因为它们将在 的客户端REQ-id#之前加载到新注入的“服务”帧中REQ-有效负载连接到电线上。这可能会混淆消息接收/处理代码的服务器部分。

对于更勇敢的设计师,可以使用PAIR/PAIR形式模式原型,因为它不会灌输任何严格的形式行为,但请仔细阅读 API 规范。

  • 哦有趣的是,我没有意识到可以有一个 PUSH/PULL 套接字,其中 PULL 端执行 bind() ,PUSH 端执行 connect() (2认同)