xref: /aosp_15_r20/external/grpc-grpc/examples/python/async_streaming/README.md (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker# gRPC Python Non-Blocking Streaming RPC Client Example
2*cc02d7e2SAndroid Build Coastguard Worker
3*cc02d7e2SAndroid Build Coastguard WorkerThe goal of this example is to demonstrate how to handle streaming responses
4*cc02d7e2SAndroid Build Coastguard Workerwithout blocking the current thread. Effectively, this can be achieved by
5*cc02d7e2SAndroid Build Coastguard Workerconverting the gRPC Python streaming API into callback-based.
6*cc02d7e2SAndroid Build Coastguard Worker
7*cc02d7e2SAndroid Build Coastguard WorkerIn this example, the RPC service `Phone` simulates the life cycle of virtual
8*cc02d7e2SAndroid Build Coastguard Workerphone calls. It requires one thread to handle the phone-call session state
9*cc02d7e2SAndroid Build Coastguard Workerchanges, and another thread to process the audio stream. In this case, the
10*cc02d7e2SAndroid Build Coastguard Workernormal blocking style API could not fulfill the need easily. Hence, we should
11*cc02d7e2SAndroid Build Coastguard Workerasynchronously execute the streaming RPC.
12*cc02d7e2SAndroid Build Coastguard Worker
13*cc02d7e2SAndroid Build Coastguard Worker## Steps to run this example
14*cc02d7e2SAndroid Build Coastguard Worker
15*cc02d7e2SAndroid Build Coastguard WorkerStart the server in one session
16*cc02d7e2SAndroid Build Coastguard Worker```
17*cc02d7e2SAndroid Build Coastguard Workerpython3 server.py
18*cc02d7e2SAndroid Build Coastguard Worker```
19*cc02d7e2SAndroid Build Coastguard Worker
20*cc02d7e2SAndroid Build Coastguard WorkerStart the client in another session
21*cc02d7e2SAndroid Build Coastguard Worker```
22*cc02d7e2SAndroid Build Coastguard Workerpython3 client.py
23*cc02d7e2SAndroid Build Coastguard Worker```
24*cc02d7e2SAndroid Build Coastguard Worker
25*cc02d7e2SAndroid Build Coastguard Worker## Example Output
26*cc02d7e2SAndroid Build Coastguard Worker```
27*cc02d7e2SAndroid Build Coastguard Worker$ python3 server.py
28*cc02d7e2SAndroid Build Coastguard WorkerINFO:root:Server serving at [::]:50051
29*cc02d7e2SAndroid Build Coastguard WorkerINFO:root:Received a phone call request for number [1415926535]
30*cc02d7e2SAndroid Build Coastguard WorkerINFO:root:Created a call session [{
31*cc02d7e2SAndroid Build Coastguard Worker  "sessionId": "0",
32*cc02d7e2SAndroid Build Coastguard Worker  "media": "https://link.to.audio.resources"
33*cc02d7e2SAndroid Build Coastguard Worker}]
34*cc02d7e2SAndroid Build Coastguard WorkerINFO:root:Call finished [1415926535]
35*cc02d7e2SAndroid Build Coastguard WorkerINFO:root:Call session cleaned [{
36*cc02d7e2SAndroid Build Coastguard Worker  "sessionId": "0",
37*cc02d7e2SAndroid Build Coastguard Worker  "media": "https://link.to.audio.resources"
38*cc02d7e2SAndroid Build Coastguard Worker}]
39*cc02d7e2SAndroid Build Coastguard Worker```
40*cc02d7e2SAndroid Build Coastguard Worker
41*cc02d7e2SAndroid Build Coastguard Worker```
42*cc02d7e2SAndroid Build Coastguard Worker$ python3 client.py
43*cc02d7e2SAndroid Build Coastguard WorkerINFO:root:Waiting for peer to connect [1415926535]...
44*cc02d7e2SAndroid Build Coastguard WorkerINFO:root:Call toward [1415926535] enters [NEW] state
45*cc02d7e2SAndroid Build Coastguard WorkerINFO:root:Call toward [1415926535] enters [ACTIVE] state
46*cc02d7e2SAndroid Build Coastguard WorkerINFO:root:Consuming audio resource [https://link.to.audio.resources]
47*cc02d7e2SAndroid Build Coastguard WorkerINFO:root:Call toward [1415926535] enters [ENDED] state
48*cc02d7e2SAndroid Build Coastguard WorkerINFO:root:Audio session finished [https://link.to.audio.resources]
49*cc02d7e2SAndroid Build Coastguard WorkerINFO:root:Call finished!
50*cc02d7e2SAndroid Build Coastguard Worker```
51