Create streaming-roadmap.md

This commit is contained in:
Wenbo Zhu 2020-07-30 17:11:49 -07:00 committed by GitHub
parent d8e039f255
commit 222cc8d484
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 41 additions and 0 deletions

41
doc/streaming-roadmap.md Normal file
View File

@ -0,0 +1,41 @@
# Overview
This document describes the road-map for gRPC-Web to support different streaming features.
* Server-streaming
* Client-streaming and half-duplex streaming
* Full-duplex streaming over HTTP
* Full-duplex streaming over Web-transport
# Server-streaming
We will keep improving server-streaming in the following areas:
* Finalizing keep-alive support (via Envoy) - 2020
* Performance improvements and whatwg Fetch/streams support, including service workers - 2020
* Addressing runtime behavior gaps between Fetch and XHR - 2020+
# Client-streaming and half-duplex streaming
We are actively involved in the Chrome [Origin Trial](https://developers.chrome.com/origintrials/#/view_trial/3524066708417413121)
to finalize the fetch/upload stream API spec (whatwg). One of the pending issues that blocks the final spec is to decide whether it is safe to enable
upload-streaming over HTTP/1.1. We believe that upload-streaming should be enabled for both HTTP/2 and HTTP/1.1. Specifically for gRPC-Web, the server can't control
the client deployment. As a result, if upload-streaming is only enabled over HTTP/2, a gRPC service will have to implement a non-streaming method
as a fallback for each client-streaming method.
Once the whatwg spec is finalized and upload-streaming is support by major browsers (2020-2021), we will add client-streaming support
in gRPC-Web (and Envoy) which will also enable half-duplex bidi streaming support.
# Full-duplex streaming over HTTP
We have no plan to support full-duplex streaming over WebSockets (over TCP or HTTP/2). We will not publish any experimental spec for gRPC over WebSockets either.
If you need build a Web application against a bidi gRPC service, you might choose to implement a custom client with something like socket.io.
On the server-side, the websocket messages will be handled by any language-specific Web framework, with a translation module to map websocket messages to gRPC messages.
Alternatively, it is possible to support bidi communication over dual HTTP requests, one for download-streaming and the other for upload-streaming,
similar to what's implemented by Google to support the [W3C Speech API](https://wicg.github.io/speech-api/).
Once client-streaming is supported in gRPC-Web, we will publish a spec to enable bidi streaming over dual HTTP requests and implement the complete support in Envoy (2021).
# Full-duplex streaming over Web-transport
We are working with the Chromium Blink team to evaluate how to leverage this whole new transport and QUIC. Stay tuned.