Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Python3でgRPCをつかう その2:サーバーとクライアントをつくる

実際のところ

ソースコード

サーバー側
from concurrent import futures
import grpc
import helloworld_pb2
import helloworld_pb2_grpc

class GreeterServicer(helloworld_pb2_grpc.GreeterServicer):
    def SayHello(self, request, context):
        return helloworld_pb2.HelloReply(message="Hello, %s!" % request.name)

def serve():
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    helloworld_pb2_grpc.add_GreeterServicer_to_server(GreeterServicer(), server)
    server.add_insecure_port('[::]:50051')
    server.start()
    server.wait_for_termination()

if __name__ == '__main__':
    serve()
クライアント側
import grpc
import helloworld_pb2
import helloworld_pb2_grpc

def run():
    channel = grpc.insecure_channel('localhost:50051')
    stub = helloworld_pb2_grpc.GreeterStub(channel)
    response = stub.SayHello(helloworld_pb2.HelloRequest(name='world'))
    print("Greeter client received: " + response.message)

if __name__ == '__main__':
    run()

実験

サーバー側は、特に何も出ず

$ python server.py

クライアント側はコールすると、一回だけ

$ python client.py
Greeter client received: Hello, world!