ZeroMQ:从多个线程将有序消息推送到服务器的 inproc 客户端的推荐模式?

ZeroMQ: Recommended pattern for inproc clients from multiple threads pushing ordered messages to a server?

我的要求

等问题的答案

给出不同的意见。那么我应该简单地要求客户端推送到在另一个线程中创建的单个 inproc PULL 服务器,还是使用路由器经销商模式?

在第二个问题的评论之一中,我得到 STREAMER pattern 似乎存在于 pyzmq 中,但我不确定它是否是正确的解决方案或者它是否适用于 C API 有吗?

Q : Recommended pattern for inproc clients from multiple threads pushing ordered messages to a server?

对此类公式化问题的任何回答都依赖于缺失的信息:偏好集是什么,它导致区分上述操作的不充分、充分、更好和最佳解决方案。

您是否需要从服务器到客户端的确认反馈,因为消息传递是零保证的?

您需要处理一组静态或动态客户端吗?

与 RAM 占用空间相比,您更喜欢性能吗?


如果没有这些 "criteria" 中的任何一个表达,一个严肃的人永远不会 "recommend",因为任何这样的陈述都是公正的意见。

PUSH/PULL 可能足以满足未确认的交付(一个乐观的盲目用例,如果眼不见心不烦的设计理念在生产)

PAIR/PAIR 可能足以满足快速 .poll( ZeroWait, ZMQ_POLLIN ) 服务器端扫描,服务器端 POSACK 响应可以发送到相应的客户端 -线程,其消息已交付并接受以供服务器端处理(用户定义的消息确认握手协议、处理 POSACK/NACK 超时/乱序升级等,超出了此 post 的范围)

PUB/SUBXPUB/XSUB 可能足以对基于主题的信令进行一些更棘手的管理,双向在 X 版本中,如果这证明主题过滤开销的附加成本是合理的(取决于 ZeroMQ 版本,是分布在所有客户端线程上,还是集中在服务器线程端)

决定权在你。