【问题标题】:Is nanomsg or ZeroMQ appropriate for scaling number of client connections?nanomsg 或 ZeroMQ 是否适合扩展客户端连接数?
【发布时间】:2015-07-06 17:05:06
【问题描述】:

我需要建立一种即时通讯系统。根据我的简短探索,ZeroMQ 和 nanomsg 的目标是后端分布式系统中的服务器-服务器通信,而不是同时管理 +100K 的最终用户客户端连接。那准确吗?如果是这样,C 语言中是否有一个很好的消息传递库,可以很好地适应客户端数量?消息将是服务器->客户端推送和客户端->服务器请求/响应的混合体。

【问题讨论】:

  • 是什么让你认为 zmq/nanomsg 不适合这种用途?
  • @jason,请参阅下面的评论。 nanomsg 作者似乎忽略了每个 tcp 连接的开销问题,这是我的主要问题之一。另外,从我的阅读来看,似乎 nanomsg 要求每个套接字占据一个不同的角色,这不符合我上面描述的两个端点都可以发起消息的情况。
  • 嗨!您最后为您的项目选择了哪个消息库? ZeroMQ、nanomsg 还是别的什么?
  • @sg7,我最终自己写了
  • 哇,令人印象深刻!你能处理多少个连接?它基于任何库吗?谢谢!

标签: c tcp zeromq scalability nanomsg


【解决方案1】:

nanomsg 库不是面向服务器的服务器到服务器协议。它有一些独特的沟通贴片,涵盖了广泛的沟通需求。 请参阅:nanomsg communication patterns

nanomsg 库非常易于使用 - nn_bindnn_connect 可以在同一个套接字上被多次调用,从而允许套接字与多个异构端点进行通信。

我对 nanomsg 的偏好优于 ZeroMQ 是基于 article1article2 和我自己的编码经验。还可以看看这里给出的非常好的比较:Are there any Python 2.7 alternatives to ZeroMQ that are released under the BSD or MIT license?

确实,nanomsg 库使网络层变得快速、可扩展且易于使用。

【讨论】:

    【解决方案2】:

    当您想使用 tcp/ip 库来允许 10 万个同时的最终用户客户端保持活动状态时,您会遇到问题,因为您的系统将用完连接所有这些客户端的端口。 ZeroMQ 和 nanomsg 似乎都解决了这个问题。乍一看,我会说 nanomsg 是更好的方法。但我需要先尝试一下。

    Nanomsg 似乎实际上旨在解决您的问题。

    【讨论】:

    • 服务器没有理由需要多个端口来服务 100K 连接。连接由远程 (addr,port) 区分。它将需要 100K 个套接字,但它们都可以使用相同的本地端口。
    • 我认为 nanomsg 可能不太适合这个的原因是 github.com/nanomsg/nanomsg/blob/master/rfc/… 上关于它为什么不支持多路复用的评论。并不是说多路复用对我来说是个大问题,但评论表明在设计中无需担心 tcp 连接的开销。
    • 我同意,如果您决定需要 50 台服务器来管理所有这些客户端连接,那么 nanomsg 将是一个不错的选择。然后它将帮助管理这 50 台服务器之间的通信。但是,我想最大化每台服务器的客户端数量,所以我有更少的服务器-服务器通信。
    猜你喜欢
    • 2019-10-07
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多