【问题标题】:ZMQ pattern for requests without replies无应答请求的 ZMQ 模式
【发布时间】:2017-10-08 03:12:35
【问题描述】:

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

【问题讨论】:

    标签: zeromq


    【解决方案1】:

    (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 规范。

    【讨论】:

    • 有趣的是,我没有意识到可以有一个 PUSH/PULL 套接字,其中 PULL 端执行 bind(),PUSH 端执行 connect()
    • 哦,当然是一个明智的选择,不是吗?大多数情况下,反向 .bind()/.connect() 场景与已知的 ZeroMQ-transport-class 访问点地址与用例相关,其中缺少此类知识(解决与地址无关的 .connect( )+动态节点(重新)-发现)。无论如何,希望您始终享受 ZeroMQ 等智能且强大的工具。 (可能也对来自 Martin SUSTRIK 的妹妹 nanomsg 感兴趣。值得一提并比较其 SWOT)
    猜你喜欢
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多