Google云端硬盘使用什么技术来获取实时更新?

Max*_*ber 34 real-time long-polling websocket server-sent-events

Google云端硬盘使用什么技术进行实时操作?

当我输入多个用户正在访问的Google云端硬盘文档时,Chrome开发者工具网络标签显示没有WebSockets.

我看到两种最常见的AJAX调用类型都有"绑定"?还是"保存?" 在URL中."保存?" 每次输入时都会发出POST请求,这对于向服务器发送更新很有意义.

当另一个用户输入时,最近的"绑定?" GET呼叫保持打开状态,通过该连接传输的数据量也会增加.周期性地,"绑定?"被关闭,新的打开,逻辑似乎是持续时间和数据大小的一些功能.

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

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

Google正在做什么名称?如果是这样,我该如何尝试实现呢?

Chrome开发者工具 - 修改Google云端硬盘文档

Max*_*ber 46

Google的驱动程序中的实时更新解决方案是否有名称(例如"长轮询"或"套接字")?

直到现在它还没有名字.我将其称为"无轮询",与民意调查和长期民意调查形成鲜明对比.

通过轮询,客户端会定期发送新数据查询.

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

无轮询(Google Drive的功能)利用浏览器在请求完成之前如何从请求正文中读取数据.因此,当协作者进行更多的键入和编辑时,服务器会将更多数据附加到当前请求.如果满足某些限制(内容的长度或请求的持续时间),则请求完成,并且客户端向服务器发起新请求.

我该如何尝试实现这个?

让客户端向服务器发送更新:这可以通过普通的POST来完成.

让客户端从服务器订阅更新:

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

    XHR对象可以progress在请求完成之前发出事件.(部分)响应可以使用 xhr.responseText.~~有没有简单的方法来进步与手表fetch 尚未(2016月).~~当使用fetch一个可以通过观看进度消耗res.body ReadableStream.

  • 当前请求结束时,客户端应发起新请求.

服务器必须:

  • 跟踪哪些客户端订阅了哪些更新流.
  • 当请求进入特定更新流时,将数据写入响应,但在数据量变大或满足超时之前不完成响应.

在我看来,非民意调查似乎优于长期民意调查,尽管我没有多玩过.长轮询强制延迟和消息大小之间的权衡(给定恒定的更新速率),不必进行权衡无轮询.长轮询的另一个缺点是它可能导致许多HTTP请求,每次都支付HTTP的开销.

No-polling相对于WebSockets的一大优势是每个浏览器都支持不轮询,尽管WebSocket支持非常好 - IE10 +.

  • 当前的 `fetch` 规范说 [`res.body` 是一个 `ReadableStream`](https://fetch.spec.whatwg.org/#concept-body),使您能够使用 `fetch` 观察进度。 (2认同)

小智 6

这里描述的无轮询听起来像“服务器发送事件 - SSE”,其中客户端发送一个以“text/event-stream”作为内容类型的 http get 请求。服务器保留请求并在需要时向客户端发送响应。它是持久性的,但与 web-socket 不同,因为 web-socket 它是两种方式通信,但 SSE 是一种方式(只有服务器向客户端发送有效负载/消息)