diff --git a/doc/streaming-roadmap.md b/doc/streaming-roadmap.md new file mode 100644 index 0000000..33ec421 --- /dev/null +++ b/doc/streaming-roadmap.md @@ -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.