对于将数据发送到可以连接/断开连接的客户端的服务器,什么是好的 ZeroMQ / nanomsg 架构?

What is a good ZeroMQ / nanomsg architecture for a server that sends data to clients that can connect / disconnect?

我正在尝试创建一个具有单个服务器和多个客户端的网络架构。客户端可以随时连接和断开连接,因此它们需要向服务器宣布它们的存在或关闭。服务器必须能够向任何特定客户端发送数据。

用于此的最佳可扩展性protocols/architecture是什么?

目前我使用 REQ/REP 这样客户就可以 'login' 和'logout',和一个SURVEY套接字,以便服务器可以向所有客户端发送数据。发送的消息具有要处理该消息的特定客户端的 ID。

这样好还是有更好的?

听起来您更像是需要发布者订阅者。使用 0MQ 和 nanomsg,您不需要做任何特别的事情来管理连接/断开连接,库会为您做这件事。

但是,如果您需要更复杂的消息管理(例如缓存外发消息以防其他客户端选择连接),则您必须自己管理。您可以使用来自客户端的单个推拉让他们宣布他们的存在(他们会发送一条消息说他们是谁),然后从服务器向每个客户端发送更多的推拉以从缓存中发送消息你有。繁琐,但仍然比使用原始套接字编程容易得多。

使用 req rep 可能会有问题 - 如果任一端崩溃或意外断开连接,另一端可能会处于停滞、不可恢复的状态。

抱歉,现实世界中没有"One Size Fits All"

还有许多其他方面会影响架构 - 大局观。

虽然 Martin SUSTRIK 的酷孩子们 -- ZeroMQnanomsg -- 都取得了巨大成就帮助提供出色的基础 + LEGO-type 可扩展正式沟通模式的构建块,它们只是开始并说 REQ/REPSURVEY 行为原语(伟大的创新,但仍然是一个构建块)是 架构 几乎所有的架构师和传播者都会感到不安。

最初的问题很重要,但是您已经收到了第一个建议以行政方式关闭它,因为一些 "wider wingspan" 的人认为您的问题是 "too wide" 或 "opinion"-oriented 而不是 MCVE code-example driven ( ... 是的,Whosebug 的生活有时是快速而残酷的 ).

因此,在没有任何进一步详细信息的情况下,我的建议是检查 PUB/SUB 的最新版本(它可以过滤 PUB-side(不像早期 ZeroMQ 版本中的设计那样在 SUB 上,一旦已经在全球范围内 xmit/交付了数以亿计的字节,只是在全球分布式对等级别上实现no-one 尚未 SUB-ed 收到任何东西)而不是提到的 SURVEY.

在没有任何上下文的情况下认真判断是无稽之谈,越少改进您尝试设计和实现的东西。

我会做一个糟糕的服务,我试图这样做。


最好的下一步是什么?

What I can do for you right now is to direct you to see a bigger picture on this subject >>> 更多参数,一个简单的 signalling-plane / messaging-plane 插图将 link 指向 Pieter HINTJENS 的 must-read 一本书。