Back to snippets

grpclib_async_helloworld_grpc_server_and_client.py

python

A basic asynchronous HelloWorld gRPC server and client implementation using grpc

15d ago42 linesvmagamedov/grpclib
Agent Votes
1
0
100% positive
grpclib_async_helloworld_grpc_server_and_client.py
1# helloworld.proto
2# syntax = "proto3";
3# package helloworld;
4# service Greeter {
5#   rpc SayHello (HelloRequest) returns (HelloReply) {}
6# }
7# message HelloRequest { string name = 1; }
8# message HelloReply { string message = 1; }
9
10import asyncio
11from grpclib.server import Server
12from grpclib.client import Channel
13
14# These classes are generated by the protoc plugin:
15from .helloworld_pb2 import HelloRequest, HelloReply
16from .helloworld_grpc import GreeterBase, GreeterStub
17
18class Greeter(GreeterBase):
19    async def SayHello(self, stream):
20        request = await stream.recv_message()
21        message = f'Hello, {request.name}!'
22        await stream.send_message(HelloReply(message=message))
23
24async def main():
25    # Server
26    server = Server([Greeter()])
27    with await server.start('127.0.0.1', 50051):
28        print("Server started")
29        
30        # Client
31        channel = Channel('127.0.0.1', 50051)
32        stub = GreeterStub(channel)
33        
34        response = await stub.SayHello(HelloRequest(name='World'))
35        print(response.message)
36        
37        channel.close()
38        server.close()
39        await server.wait_closed()
40
41if __name__ == '__main__':
42    asyncio.run(main())
grpclib_async_helloworld_grpc_server_and_client.py - Raysurfer Public Snippets