【问题标题】:Broadcasting Messages at High Frequency. Using HTTP POST or something else?高频广播消息。使用 HTTP POST 或其他方式?
【发布时间】:2012-02-08 16:57:57
【问题描述】:

我们正在考虑设计一个系统,该系统能够以相当高的频率(我们的更新速度为每秒 1000 次)向多个接收者广播少量频繁变化的数据(使用 JSON 或 XML 之类的)。

我们最初考虑使用 HTTP POST 将数据广播到每个端点,可能每隔几秒一次(客户端会有所不同,因为它们是其他人的 web 应用程序),但我们现在想知道是否有更好的方法坚持我们希望的负载/频率。我想我们至少需要以某种方式对消息进行版本/时间戳记。

我们正在使用 RabbitMQ 来准备所有要发送的东西,并选择需要去哪里(从 Django 应用程序,如果这很重要),但我们不能让所有端点都使用 MQ。

HTTP POST 看起来不太对劲。我们还应该关注什么?这是否适合 node 或 socket.io 或一些新的实时框架之类的东西?我们很高兴找到合适的专业知识来帮助解决这个问题,只需要引导正确的方向。

谢谢!

【问题讨论】:

  • 服务器和客户端的首选编程语言是什么?似乎您可以使用 Java 和 Netty 制作原型。此外,除了“HTTP POST”,您还可以使用尖端技术并使用“WebSockets”。

标签: node.js socket.io broadcast broadcasting


【解决方案1】:

您不希望每秒向多个客户端发送数千个 POST。您将在将其推出的一端引入 HTTP 开销,并且就您所知,您最终可能会用刚刚淹没它的 POST 淹没另一端的服务器。

选项 1:对于不能或不会读取队列的客户端,POSTS 可以工作,但为了避免终止服务器和所有 HTTP 开销,您可以捆绑更新吗?每两分钟一次,获取所有聚合数据,然后将其发布给客户端?这样一来,您就不会有 60 多个 POST 请求每分钟或每两分钟向一个客户端发送时间和永恒。它也将有助于节省带宽,因为您只发送一次包含更多数据的所有标头信息,而不是发送所有标头信息和数据片段。

选项 2:您是否考虑过使用良好的 'ole 套接字连接?要么打开一个到客户端的套接字,反之亦然,然后将数据推送到上面?这避免了 HTTP 的开销,并让客户端以数据到达的速率读取。如果客户端不再想接收数据,他们可以关闭连接。它在奥术方面,但它会避免完全杀死目标服务器。

如果您可以让客户阅读 MQ,请为他们建立一个小组,让您的生活更轻松,这样您只需处理那些不能或不会阅读队列的人,而不是尝试一个人尺寸适合所有解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-24
    • 2015-08-02
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 2018-04-02
    相关资源
    最近更新 更多