【问题标题】:Decision whether to use simple HTTP requests or WebSockets决定是使用简单的 HTTP 请求还是 WebSockets
【发布时间】:2017-08-06 03:48:12
【问题描述】:

我们正在实施一项被许多用户同时使用的服务。在高峰期,我们可以有数万人在线。

我们服务的关键部分需要重新实现,因此我们尝试想出新的方法来实现它。目前,我们基于用户交互发送简单且非常短/小的 AJAX HTTP 请求:

  • Ping:我仍然活跃
  • 活动:我已经完成了,请将其写入数据库
  • 完成:我已经完成我的活动,所以我的请求很接近

同时,在某些情况下(十分之一),我们打开了EventSource,从中我们读取了服务器上的一些修改。

问题是这个模型是否足够好,或者是否最好打开一个 WebSocket 并通过 WebSockets 传递所有内容。

  • 优势 - 对于每个用户,我们将只维护一个连接,而不是发送多个请求。
  • 缺点 - 当很多人在线时,我们会保持数千个连接处于活动状态

正确实施的决定应该是什么?

注意到这个问题的答案是一样的:WebSockets protocol vs HTTP——但是我要求具体的用例。相关问题是一般性的。

【问题讨论】:

标签: ajax http websocket


【解决方案1】:
  • 缺点 - 当很多人在线时,我们会保持数千个连接处于活动状态

您可以实现您的服务以在超时后关闭空闲的 websocket 连接。这可能与EventSource 为您工作的方式相同,因此您不会保留太多活动连接。 (类似的性能特征。)

(但是如果你是依赖浏览器提供的EventSource自动重连,那么切换到WebSocket意味着你需要为重连的逻辑编写更多的代码。)

通常,WebSocket 应该具有较少的网络流量开销。但是有多少差异取决于您当前的服务是如何实现的。如果您已经优化了您的逻辑并使用 AJAX 和EventSource 充分发挥了性能,那么使用 WebSocket 可能会有一点点改进。

【讨论】:

  • 他可以像你说的那样打开一个网络套接字并在超时后关闭它。这样,当用户执行特定操作(例如:单击、鼠标移动或键盘按下)时,他可以通过 Web 套接字发送 ping。否则连接关闭。恕我直言,这比打开和关闭连接要好很多。他可以通过水平扩展他的后端来解决许多打开连接的问题,即每个实例额外增加约 65000 个连接。
猜你喜欢
  • 2017-06-18
  • 2013-10-10
  • 2014-07-04
  • 2012-04-07
  • 2021-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多