mirror of
https://github.com/php-win-ext/grpc.git
synced 2026-03-24 17:12:19 +01:00
### Description Fix https://github.com/grpc/grpc/issues/24470. Adding one example which demonstrate the following use cases: * Generate RPC ID on client side and propagate to server. * Context propagation from client to server. * Context propagation between different server interceptors and the server handler. ## Use: 1. Start server: `python3 -m async_greeter_server_with_interceptor` 2. Start client: `python3 -m async_greeter_client` ### Expected Logs: * On client side: ``` Sending request with rpc id: 73bb98beff10c2dd7b9f2252a1e2039e Greeter client received: Hello, you! ``` * On server side: ``` INFO:root:Starting server on [::]:50051 INFO:root:Interceptor1 called with rpc_id: default INFO:root:Interceptor2 called with rpc_id: Interceptor1-default INFO:root:Handle rpc with id Interceptor2-Interceptor1-73bb98beff10c2dd7b9f2252a1e2039e in server handler. ```
1.7 KiB
1.7 KiB
gRPC Python Async Interceptor Example
This example demonstrate the usage of Async interceptors and context propagation using contextvars.
When to use contextvars
Contextvars can be used to propagate context in a same thread or coroutine, some example usage include:
- Propagate from interceptor to another interceptor.
- Propagate from interceptor to the server handler.
- Propagate from client to server.
How does this example works
This example have the following steps:
- Generate RPC ID on client side and propagate to server using
metadata.contextvarscan be used here if client and server is running in a same coroutine (or same thead for Sync).
- Server interceptor1 intercept the request, it checks
rpc_id_varand decorate it with it's tagInterceptor1. - Server interceptor2 intercept the request, it checks
rpc_id_varand decorate it with it's tagInterceptor2. - Server handler receives the request with
rpc_id_vardecorated by both interceptor1 and interceptor2.
How to run this example
- Start server:
python3 -m async_greeter_server_with_interceptor - Start client:
python3 -m async_greeter_client
Expected outcome
- On client side, you should see logs similar to:
Sending request with rpc id: 59ac966558b3d7d11a06bd45f1a0f89d
Greeter client received: Hello, you!
- On server side, you should see logs similar to:
INFO:root:Starting server on [::]:50051
INFO:root:Interceptor1 called with rpc_id: default
INFO:root:Interceptor2 called with rpc_id: Interceptor1-59ac966558b3d7d11a06bd45f1a0f89d
INFO:root:Handle rpc with id Interceptor2-Interceptor1-59ac966558b3d7d11a06bd45f1a0f89d in server handler.