gRPC Hostname Example ===================== The hostname example is a Hello World server whose response includes its hostname. It also supports health and reflection services. This makes it a good server to test infrastructure, like load balancing. This example depends on a gRPC version of 1.28.1 or newer. ### Run the Server 1. Navigate to this directory: ```sh cd grpc/examples/python/xds ``` 2. Run the server ```sh virtualenv venv -p python3 source venv/bin/activate pip install -r requirements.txt python server.py ``` ### Run the Client 1. Set up xDS configuration. After configuring your xDS server to track the gRPC server we just started, create a bootstrap file as desribed in [gRFC A27](https://github.com/grpc/proposal/blob/master/A27-xds-global-load-balancing.md): ``` { xds_servers": [ { "server_uri": , "channel_creds": [ { "type": , "config": } ] } ], "node": } ``` 2. Point the `GRPC_XDS_BOOTSTRAP` environment variable at the bootstrap file: ``` export GRPC_XDS_BOOTSTRAP=/etc/xds-bootstrap.json ``` 3. Run the client: ``` python client.py xds-experimental:///my-backend ``` ### Verifying Configuration with a CLI Tool Alternatively, `grpcurl` can be used to verify your server. If you don't have it, install [`grpcurl`](https://github.com/fullstorydev/grpcurl/releases). This will allow you to manually test the service. Be sure to set up the bootstrap file and `GRPC_XDS_BOOTSTRAP` as in the previous section. 1. Verify the server's application-layer service: ```sh > grpcurl --plaintext -d '{"name": "you"}' localhost:50051 { "message": "Hello you from rbell.svl.corp.google.com!" } ``` 2. Verify that all services are available via reflection: ```sh > grpcurl --plaintext localhost:50051 list grpc.health.v1.Health grpc.reflection.v1alpha.ServerReflection helloworld.Greeter ``` 3. Verify that all services are reporting healthy: ```sh > grpcurl --plaintext -d '{"service": "helloworld.Greeter"}' localhost:50051 grpc.health.v1.Health/Check { "status": "SERVING" } > grpcurl --plaintext -d '{"service": ""}' localhost:50051 grpc.health.v1.Health/Check { "status": "SERVING" } ```