Remote Procedure Call (RPC) là một giao thức cho phép một chương trình (client) gọi một hàm hoặc thủ tục trên một máy chủ từ xa như thể nó đang gọi hàm cục bộ. RPC ẩn giấu các chi tiết của giao tiếp mạng, giúp các nhà phát triển dễ dàng tích hợp và sử dụng các dịch vụ từ xa.
Giả sử bạn có một dịch vụ tính toán trên server và bạn muốn sử dụng nó từ client.
Server (Python):
add
Chạy lệnh sau để tạo mã nguồn cho Python (cần cài đặt gRPC):
python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. calculator.proto
import grpc from concurrent import futures import calculator_pb2 import calculator_pb2_grpc class Calculator(calculator_pb2_grpc.CalculatorServicer): def Add(self, request, context): result = request.x + request.y return calculator_pb2.AddResponse(result=result) def serve(): server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) calculator_pb2_grpc.add_CalculatorServicer_to_server(Calculator(), server) server.add_insecure_port('[::]:50051') server.start() print("Server đang chạy trên cổng 50051...") server.wait_for_termination() if __name__ == '__main__': serve()
import grpc import calculator_pb2 import calculator_pb2_grpc def run(): with grpc.insecure_channel('localhost:50051') as channel: stub = calculator_pb2_grpc.CalculatorStub(channel) response = stub.Add(calculator_pb2.AddRequest(x=5, y=3)) print(f"Kết quả là: {response.result}") if __name__ == '__main__': run()
RPC và gRPC đều là những công nghệ mạnh mẽ cho việc phát triển các ứng dụng phân tán. RPC cung cấp cách tiếp cận đơn giản để gọi các hàm từ xa, trong khi gRPC mang đến hiệu suất cao hơn và khả năng mở rộng tốt hơn. gRPC, với sự hỗ trợ của HTTP/2 và Protocol Buffers, giúp tối ưu hóa hiệu suất và trải nghiệm lập trình viên.
Việc lựa chọn giữa hai công nghệ này phụ thuộc vào nhu cầu cụ thể của ứng dụng, yêu cầu về hiệu suất và khả năng tương tác giữa các dịch vụ.