This will be a new override. The old override is now deprecated. In order to pass new information without adding new overrides, I shoved most information into an object called StreamInfo. The Metadata is left out to draw attention because it's mutable. Motivation: this is needed for correctly supporting pick_first in GRPCLB. GRPCLB needs to add a token to the headers, and the token varies among servers. With round_robin, GRPCLB create a Subchannel for each server, thus can attach the token when the Subchannel is picked. To implement pick_first, all server addresses will be put in a single Subchannel, we will need to add the header in newClientStreamTracer(), by looking up the server address from the transport attributes and deciding which token to add. |
||
|---|---|---|
| .. | ||
| src | ||
| .gitignore | ||
| README.md | ||
| build.gradle | ||
| proguard-rules.pro | ||
README.md
gRPC Cronet Transport
EXPERIMENTAL: gRPC's Cronet transport is an experimental API, and is not yet integrated with our build system. Using Cronet with gRPC requires manually integrating the gRPC code in this directory into your Android application.
This code enables using the Chromium networking stack (Cronet) as the transport layer for gRPC on Android. This lets your Android app make RPCs using the same networking stack as used in the Chrome browser.
Some advantages of using Cronet with gRPC:
- Bundles an OpenSSL implementation, enabling TLS connections even on older versions of Android without additional configuration
- Robust to Android network connectivity changes
- Support for QUIC
Cronet jars are available on Google's Maven repository. See the example app at
https://github.com/GoogleChrome/cronet-sample/blob/master/README.md. To use
Cronet with gRPC, you will need to copy the gRPC source files contained in this
directory into your application's code, as we do not currently provide a
grpc-cronet dependency.
To use Cronet, you must have the ACCESS_NETWORK_STATE permission set in
AndroidManifest.xml:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Once the above steps are completed, you can create a gRPC Cronet channel as follows:
import io.grpc.cronet.CronetChannelBuilder;
import org.chromium.net.ExperimentalCronetEngine;
...
ExperimentalCronetEngine engine =
new ExperimentalCronetEngine.Builder(context /* Android Context */).build();
ManagedChannel channel = CronetChannelBuilder.forAddress("localhost", 8080, engine).build();