grpc-web/doc/streaming-roadmap.md

2.5 KiB

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 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.

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.