| # gRPC Python Non-Blocking Streaming RPC Client Example | |
| The goal of this example is to demonstrate how to handle streaming responses | |
| without blocking the current thread. Effectively, this can be achieved by | |
| converting the gRPC Python streaming API into callback-based. | |
| In this example, the RPC service `Phone` simulates the life cycle of virtual | |
| phone calls. It requires one thread to handle the phone-call session state | |
| changes, and another thread to process the audio stream. In this case, the | |
| normal blocking style API could not fulfill the need easily. Hence, we should | |
| asynchronously execute the streaming RPC. | |
| ## Steps to run this example | |
| Start the server in one session | |
| ``` | |
| python3 server.py | |
| ``` | |
| Start the client in another session | |
| ``` | |
| python3 client.py | |
| ``` | |
| ## Example Output | |
| ``` | |
| $ python3 server.py | |
| INFO:root:Server serving at [::]:50051 | |
| INFO:root:Received a phone call request for number [1415926535] | |
| INFO:root:Created a call session [{ | |
| "sessionId": "0", | |
| "media": "https://link.to.audio.resources" | |
| }] | |
| INFO:root:Call finished [1415926535] | |
| INFO:root:Call session cleaned [{ | |
| "sessionId": "0", | |
| "media": "https://link.to.audio.resources" | |
| }] | |
| ``` | |
| ``` | |
| $ python3 client.py | |
| INFO:root:Waiting for peer to connect [1415926535]... | |
| INFO:root:Call toward [1415926535] enters [NEW] state | |
| INFO:root:Call toward [1415926535] enters [ACTIVE] state | |
| INFO:root:Consuming audio resource [https://link.to.audio.resources] | |
| INFO:root:Call toward [1415926535] enters [ENDED] state | |
| INFO:root:Audio session finished [https://link.to.audio.resources] | |
| INFO:root:Call finished! | |
| ``` |