短轮询与短持续时间请求的 Websocket 比较



所以我们有一个与大量第三方服务器通信的 Django 后端服务器。这些第三方服务器都使用套接字连接进行通信,而不是HTTP。对我们服务的每个用户请求都将与许多可能的第三方服务器之一进行通信(通过套接字(。每个第三方服务器可能需要 1-20 秒才能响应,尽管通常大约需要 1-5 秒。当然,当用户访问我们的网页以请求这些第三方服务之一时,我们希望尽快回复我们的用户,即不要在我们的服务器上阻止等待响应。当第三方服务器响应时,我们希望将响应推送回用户的浏览器。

当然,这是一个普遍的问题。但这里的关键是,我们将每 5 秒左右向我们的 Web 服务器发出请求(例如,在我们的网页中使用 JavaScript/AJAX(。我知道,如果我们能够为响应创建一个 websocket 连接并将其保持打开状态,和/或如果我们的请求持续时间真的很长(比如>30 秒(,那么 websockets 将是进行服务器推送的好方法。但是,由于各种原因,我们无法做到这一点,因此我们需要在每个请求中建立一个新的 websocket 连接。在我看来,如果我们必须每 5 秒经历一次整个过程,即打开 websocket,配置 websocket 以匹配正确的 3rd 方服务连接,向下发送命令,将该命令代理到正确的 3rd 方服务,获取响应,将其代理到正确的 websocket, 并将响应发送回浏览器,然后在 5 秒后再次执行此操作,这真的比只做基本的短轮询更好吗?我们的简短轮询方法是使用基本的 AJAX 调用将请求向下发送,然后将成功返回给浏览器。后端将代理到适当的第三方服务,当结果出现时,它会将这些结果保存到 MYSQL 表中。我们的 AJAX 每隔一两秒发送一次轮询命令(可能带有退避,例如 1,1,2,4,6,10,...秒(,直到收到响应或发生超时。这样做的实现肯定会更简单,并且几乎可以保证工作。在绝大多数情况下,我们会发出"每 5 秒一次"命令,并在第一次或第二次轮询尝试后得到响应。如果我们使用 websockets,则需要连接尝试加上一个或两个套接字写入命令才能正确配置后端代理以使用正确的后端服务,然后我们会得到响应并且套接字将关闭,我们必须在 5 秒后重新执行

。那么,在这种情况下,短轮询不是很好,甚至可能更好吗?

如果您只是要为每个请求设置一个新的 webSocket 连接,那么使用 webSocket 比使用 http 请求的开销更大。

每个 webSocket 连接都以 http 请求/响应开始,只是为了让 webSocket 初始化,然后你想发送更多的数据包 - 这不仅仅是一个 http 请求/响应。

这里真正的节省是解决任何问题,使您认为需要为每个请求创建新的 webSocket 连接。 这很可能是可以解决的。 然后,您创建一个 webSocket 连接,并仅以两种方式发送消息以发送请求和返回响应,这肯定比 http 轮询更有效。

为了真正获得比 http 更高效的效率,您需要完全停止从客户端轮询。 因此,客户端不是每 5 秒说一次"你有什么新东西要给我吗",客户端只是建立一个 webSocket 连接,指示服务器它想要收到通知的内容,然后服务器执行任何需要完成的轮询,每当它认为客户端想要的东西时,它只是将其发送到客户端而不等待轮询间隔。 客户端获取数据的速度更快(它不必等待下一个轮询间隔(,没有空的轮询请求/响应,因此服务器使用率和带宽使用率都更好。

相关内容

  • 没有找到相关文章

最新更新