【问题标题】:Which of these is the best practice for web sockets in terms of performance?就性能而言,以下哪一项是 Web 套接字的最佳实践?
【发布时间】:2018-04-15 14:57:06
【问题描述】:

这更像是一个假设性问题,所以我无法真正展示任何代码示例。想象一下,如果像 Twitter 这样的网站想要通过 web sockets/Socket.io 实时更新推文上的统计信息。就性能而言,其中哪一个是最好的方法?

  1. 每个操作(如、转发、回复)都会向服务器发送一条消息,然后将其发送给所有客户端,客户端负责更新相应的推文。
  2. 客户端加载的每条推文都连接到不同的房间,因此它只发出和接收与其自身相关的消息。
  3. 其他?

或者可能取决于应用程序的规模?如果你有一个只有几个用户的 Twitter 克隆,也许 1 更好,而我认为 2 在 Twitter 的情况下更好,因为它是数百个“房间”与 数百万 个信号/秒的问题?如果是这样的话,在什么时候一种方法优于另一种方法?

【问题讨论】:

    标签: performance websocket socket.io


    【解决方案1】:

    在规模上,您不希望向客户发送他们没有要求且没有任何用处的消息。想象一下,一个 Twitter 客户端正在接收实时发送的每条推文。这可能会使该客户端不堪重负,这意味着服务器将向每个连接的客户端发送每条推文。这显然不能在服务器端或客户端扩展。

    所以选项 1 已失效。


    适当的解决方案是让服务器只向客户端发送特别感兴趣的消息。这在任何规模上都可以正常工作。我无法判断您的选项 2 是否如此,因为房间只是一种用于建立连接组的工具,您可以向这些连接组发送相同的消息 - 他们并不能真正决定谁会收到什么消息 - 必须将逻辑融入其中你的服务器代码。

    对于类似 twitter 的服务,您似乎必须拥有一个系统,以便您的服务器可以轻松判断哪些用户对这条特定的新消息感兴趣。这可能是出于多种原因,例如他们关注作者、关注消息中存在的主题标签、消息中提及他们等等……这是服务器端逻辑,而不仅仅是简单的房间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多