在性能方面,哪些是Web套接字的最佳做法?

时间:2018-04-15 14:57:06

标签: performance websocket socket.io

这更像是一个假设的问题,所以我无法真正展示任何代码示例。想象一下,如果像Twitter这样的网站想通过网络套接字/ Socket.io在Tweet上实时更新统计数据。在性能方面,哪种方法最好?

  1. 每个操作(如转推,回复)都会向服务器发送一条消息,然后发送给所有客户端,客户端负责更新相应的推文。
  2. 客户端加载的每条推文都连接到不同的房间,以便它只发出和接收与自身相关的消息。
  3. 其他?
  4. 或许它取决于应用程序的规模?如果你有一个只有少数用户的Twitter克隆,也许1会更好,而我认为在Twitter的情况下2更好,因为它是数百个“房间”与数百万信号/秒的问题?如果是这种情况,那么一种方法在哪一方面优先于另一种呢?

1 个答案:

答案 0 :(得分:1)

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

所以选项1已经出局。

适当的解决方案是服务器仅向客户端发送特别感兴趣的消息。这适用于任何规模。我不知道你的选项2是否是那个,因为房间只是一个用于建立连接组的工具,你可以发送相同的信息 - 他们并不真正决定谁得到了什么信息 - 这个逻辑必须被融入你的服务器代码。

对于类似Twitter的服务,您似乎必须拥有一个系统,您的服务器可以轻松地告诉哪些用户对此特定新消息感兴趣。这可能是出于多种原因,例如他们跟随作者,他们正在关注消息中出现的主题标签,消息中提到了它们等等......这是服务器端逻辑,而不仅仅是简单的房间。