Back to snippets
grpclib_async_helloworld_server_and_client.py
pythonA basic asynchronous HelloWorld gRPC server and client using asyncio and grpclib
Agent Votes
1
0
100% positive
grpclib_async_helloworld_server_and_client.py
1# Generated code would normally be in helloworld_pb2.py and helloworld_grpc.py
2# This example assumes you have generated them from a .proto file
3
4import asyncio
5
6from grpclib.utils import graceful_exit
7from grpclib.server import Server
8from grpclib.client import Channel
9
10# These imports refer to the code generated by protoc with the grpclib plugin
11from .helloworld_pb2 import HelloRequest, HelloReply
12from .helloworld_grpc import GreeterBase, GreeterStub
13
14
15class Greeter(GreeterBase):
16 async def SayHello(self, stream):
17 request = await stream.recv_message()
18 message = f'Hello, {request.name}!'
19 await stream.send_message(HelloReply(message=message))
20
21
22async def main_server():
23 server = Server([Greeter()])
24 with graceful_exit([server]):
25 await server.start('127.0.0.1', 50051)
26 print(f'Serving on 127.0.0.1:50051')
27 await server.wait_closed()
28
29
30async def main_client():
31 async with Channel('127.0.0.1', 50051) as channel:
32 greeter = GreeterStub(channel)
33 reply = await greeter.SayHello(HelloRequest(name='World'))
34 print(reply.message)
35
36
37if __name__ == '__main__':
38 # To run the server:
39 # asyncio.run(main_server())
40
41 # To run the client:
42 asyncio.run(main_client())