Websocket Google Drive使用什么技术来获取实时更新?

Websocket Google Drive使用什么技术来获取实时更新?,websocket,real-time,long-polling,server-sent-events,Websocket,Real Time,Long Polling,Server Sent Events,Google Drive使用什么技术进行实时操作 当我输入一个被多个用户访问的Google Drive文档时,Chrome开发者工具网络选项卡显示没有WebSocket 我发现两种最常见的AJAX调用在URL中都有“bind”或“save”。每次我输入时都会发出“保存?”POST请求,这很有意义——普通的AJAX用于向服务器发送更新 当其他用户键入时,最近的“bind?”GET调用保持打开状态,并且通过该连接传输的数据量增加。周期性地关闭“绑定”,打开新的绑定,逻辑似乎是持续时间和数据大小的函数

Google Drive使用什么技术进行实时操作

当我输入一个被多个用户访问的Google Drive文档时,Chrome开发者工具网络选项卡显示没有WebSocket

我发现两种最常见的AJAX调用在URL中都有“bind”或“save”。每次我输入时都会发出“保存?”POST请求,这很有意义——普通的AJAX用于向服务器发送更新

当其他用户键入时,最近的“bind?”GET调用保持打开状态,并且通过该连接传输的数据量增加。周期性地关闭“绑定”,打开新的绑定,逻辑似乎是持续时间和数据大小的函数

这不是长轮询,因为当服务器发送更新时,它不会完成响应

这似乎不是服务器发送的事件,因为内容类型是“text/plain”而不是“text/stream”

谷歌正在做的事情有名字吗?如果是这样,我如何尝试实现这一点

谷歌的硬盘实时更新解决方案(如“长轮询”或“套接字”)有名字吗? 直到现在它才有名字。与轮询和长轮询相比,我称之为“无轮询”

通过轮询,客户机定期发送对新数据的查询

通过长轮询,客户端查询数据,服务器保留请求,在有更新时以更新结束响应

无轮询(Google Drive所做的)利用了浏览器在请求完成之前从请求体读取数据的方式。因此,随着协作者进行更多的键入和编辑,服务器会向当前请求追加更多的数据。如果满足某些限制(内容的长度或请求的持续时间),请求将完成,客户端将向服务器发起新请求

我如何尝试实现这一点? 客户端向服务器发送更新:这可以通过正常的POST完成

要让客户端从服务器订阅更新,请执行以下操作:

  • 客户端发送更新流的GET,然后在响应完成之前开始读取响应体

    XHR对象可以在请求完成之前发出事件。可以使用
    xhr.responseText
    访问(部分)响应~~使用
    fetch
    (自2016年5月起)没有简单的方法可以监视进度。~~使用
    fetch
    时,可以通过以下方式监视进度

  • 当当前请求结束时,客户端应启动一个新请求

服务器必须:

  • 跟踪哪些客户端订阅了哪些更新流
  • 当针对特定更新流的请求传入时,将数据写入响应,但在数据量变大或满足超时之前,不要完成响应
在我看来,无投票似乎比长投票更优越,尽管我并没有太多地使用它。长轮询强制在延迟和消息大小(给定恒定的更新速率)之间进行权衡,不必进行轮询。长轮询的另一个缺点是,它可能导致许多HTTP请求,每次都要支付HTTP的开销


与WebSocket相比,无轮询的最大优势在于每个浏览器都不支持轮询,尽管WebSocket的支持非常好-。

我认为Facebook也有类似的功能。尝试与一些人进行对话:随着时间的推移,它会保持一个持久的HTTP连接以获取更多数据。@enlitement nice!我也看到了。
获取
/pull?
的时间最长可达50秒左右,并具有一系列JSON有效负载和心跳消息。当前的
获取
规范说明了这一点,使您能够通过
获取
监视进度。这非常有趣。。。我以前从未听说过这种方法。是否有任何框架已经实现了这种方法?或者是实现这一点的任何要点@马克斯海伯