gRPC Examples

The grpc folder contains examples for the gRPC application protocol. We provide implementations for the examples proto services provided by gRPC.

Hello World

Implementation for the gRPC hello world example.

Asynchronous

This example demonstrates asynchronous request processing for the hello world API using the HelloWorldServer and a HelloWorldClient

Blocking

This example demonstrates blocking request processing for the hello world API using the BlockingHelloWorldServer and a BlockingHelloWorldClient

Route guide

Implementation for the gRPC route guide example.

Asynchronous

Asynchronous processing for different APIs in the route guide service are demonstrated using the RouteGuideServer and the following clients:

Blocking

Blocking processing for different APIs in the route guide service are demonstrated using the BlockingRouteGuideServer and the following clients:

Compression

Extends the async "Hello World" example to demonstrate compression of the response body.

Deadlines

Extends the async "Hello World" example to demonstrate gRPC deadlines (aka timeout).

  • DeadlineServer – Waits for hello request from the client and, after 5 seconds of delay, responds with a greeting response.

  • DeadlineClient – Sends hello requests to the server with 1 minute deadline and 3 second deadline and receives a greeting response within that time or cancels the request.

Observer

This example demonstrates the following: - Use of GrpcLifecycleObserver to log a summary of each request/response.

Using the following classes:

Application Errors

The gRPC protocol supports propagating application level errors, and also provides serialization/deserialization of these objects. This example demonstrates a server returning an application level error to the client via the gRPC transport. The client intentionally omits the token field which is required, and the server returns an application level error. In this case the application level error type happens to be defined in error_details.proto, but it could be any protobuf object.

  • ErrorExampleServer - Requires each request has a non-empty token field or else returns an error.

  • ErrorExampleClient - Sends a request with missing token field to simulate an error condition on the server.

Execution Strategy

The gRPC implementation can be configured to execute all or some of the routes for a server without offloading. Using the IoExecutor for executing routes is appropriate only if there is no possibility that the route implementation will block.

The example demonstrates the impact of different route execution strategy configuration mechanisms.

  • ExecutionStrategyServer - Starts multiple servers configured using a variety of modes and techniques to specify the execution strategy to be used.

  • ExecutionStrategyClient - Sends requests to each of the differently configured servers and reports execution details.

Protoc Options

This example demonstrates how options for the servicetalk-grpc-protoc plugin can be used. See protoc-options for more details.