xmpp - 服务器推送数百万并发连接

标签 xmpp websocket messaging publish-subscribe server-push

我正在构建一个分布式系统,该系统由潜在的数百万个客户端组成,这些客户端都需要保持开放(最好是 HTTP)连接以等待来自服务器(在其他地方运行)的命令。消息/命令的负载不会很高,可能是一条消息/秒/1000 个客户端,这意味着它将是 1000 条消息/秒 @ 100 万个客户端。 => 基本上是关于并发连接。

要求也很简单。一种方式消息传递(服务器-> 客户端),每个“ channel ”只有 1 个客户端。

我在技术方面非常开放(xmpp/websockets/Comet/...)。我使用 Google App Engine 作为服务器,但不幸的是,他们的“ channel ”对我不起作用(配额太低且没有 Java 客户端)。 XMPP 是一种选择,但非常昂贵。到目前为止,我使用的是 URL Fetch & pubnub,但他们刚刚开始对连接收费(很长时间)。

所以:

  • 有谁知道那里有一种服务可以以负担得起的方式为我做到这一点?我发现大多数连接都受到限制或收取高额费用。
  • 有没有自己实现这样的服务器的经验?我实际上已经这样做了并且它运行得很好(基于 Tomcat 和 NIO)但是我还没有时间实际设置一个大型负载测试环境(部分原因是这仍然是一个后备解决方案,我更喜欢久经沙场的消息服务器)。您对每 GB 获得多少用户有任何经验吗?有什么硬性限制吗?

  • 我的架构还允许分割 msg 服务器,但我想最大化并发连接,因为 msg 处理 CPU 开销最小。

    最佳答案

    我同时使用 netty.io 实现了我自己的消息服务器。 Netty 使用 Java NIO 并且扩展性非常好。对于空闲连接,每个连接的内存占用为 500 字节。我只做非常简单的消息转发(没有缓存、存储或其他花哨的东西),但是在小型亚马逊实例(1ECU/1.6GB)上,我很容易获得 1000 - 1500 msg/秒(每半 KB)。

    否则,如果您正在寻找(付费)服务,那么我可以推荐 spire.io(他们不收取连接费用,但每条消息的价格更高)或 pubnub(他们对连接收费,但每条消息更便宜)。

    关于xmpp - 服务器推送数百万并发连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10115477/

    相关文章:

    java - 消耗掉所有 Kafka 主题然后立即断开连接?

    ios - XMPPFramework - 在 Openfire 上通过 SSL 连接

    android - 如何在 aSmack API 中获取加入房间的历史记录?

    websocket - HoloLens 网络套接字

    javascript - Socket.io-client 1.0 自动端口发现不起作用

    c# - log4net - 为跟踪目的创建许多记录器是一个好习惯吗?

    java - 使用 Java 消息服务 (JMS) 进行点对点通信

    android - 如何在 Smack 4.2 中使用证书

    XMPP:Smack 客户端未收到聊天消息

    c++ - BeagleBone -> HTML -> C++ 通信