3

Python クライアントとサーバーを使用して通信できますが、php クライアントと混同されています。プロトバッファーについて混乱しています。プロセス全体を説明する小さなプログラムが非常に役立ちます。

私は多くのドキュメントを調べましたが、実際の流れについてはまだ非常に混乱しています。

電卓.proto

syntax = "proto3";

message Request {
    int32 num1 = 1;
    int32 num2 = 2;
}

message Response{
    int32 result = 1;
}

service Calculator {
    rpc Sum(Request) returns (Response) {}
}

電卓.py

def sum(x1,x2):
  y= x1+x2
  return y

サーバー.py

import grpc
from concurrent import futures
import time

# import the generated classes
import calculator_pb2
import calculator_pb2_grpc

# import the original calculator.py
import calculator

# create a class to define the server functions, derived from
# calculator_pb2_grpc.CalculatorServicer
class CalculatorServicer(calculator_pb2_grpc.CalculatorServicer):

    # calculator.sum is exposed here
    def Sum(self, request, context):
        response = calculator_pb2.Response()
        response.result = calculator.sum(request.num1,request.num2)
        print 'Result:',response.result
        return response


# create a gRPC server
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))

# use the generated function `add_CalculatorServicer_to_server`
# to add the defined class to the server
calculator_pb2_grpc.add_CalculatorServicer_to_server(
        CalculatorServicer(), server)

# listen on port 50051
print('Starting server. Listening on port 50051.')
server.add_insecure_port('[::]:50051')
server.start()

# since server.start() will not block,
# a sleep-loop is added to keep alive
try:
    while True:
        time.sleep(86400)
except KeyboardInterrupt:
    server.stop(0)

client.py

import grpc

# import the generated classes
import calculator_pb2
import calculator_pb2_grpc

# open a gRPC channel
channel = grpc.insecure_channel('localhost:50051')

# create a stub (client)
stub = calculator_pb2_grpc.CalculatorStub(channel)
while True:
    try:
        # create a valid request message
        numbers = calculator_pb2.Request(num1=int(input("Enter number1: ")),num2=int(input("Enter number2: ")))
    # make the call
        response = stub.Sum(numbers)

        # print 'Result:',response.result
    except KeyboardInterrupt:
        print("KeyboardInterrupt")
        channel.unsubscribe(close)
        exit()

このセットアップは、サーバー (python) で 2 つの数値の加算を返します。サーバーとしてのpythonとクライアントとしてのphpで同じ機能が必要です。

4

1 に答える 1