==== gRPC ==== gRPC egy modern, nyílt forráskódú távoli eljáráshívást (Remote Procedure Call - RPC) megvalósító álltalános keretrendszer, amelyet a Google fejlesztett. Lehetővé teszi, hogy különböző platformokon és nyelveken írt alkalmazások egyszerűen kommunikáljanak egymással. gRPC protokollja alapértelmezetten Protocol Buffers-t (protobuf) használ. Alapvető koncepciók: * Szolgáltatások és metódusok: Egy .proto fájlban határozzuk meg a szolgáltatásokat, illetve azok távoli hívható metódusait. * Kliens és szerver oldali kódgenerálás: Protobuf alapján automatikusan létrejönnek az interfészek és adattípusok. ==== Mintapélda ==== Hozzunk létre egy virtuális környezetet: python -m virtualenv ./venv Majd aktiváljuk: ./venv/Scripts/activate Telepítsük a függőségeket: python -m pip install grpcio python -m pip install grpcio-tools Hozzuk létre a ./proto könvytárat és benne a IDL fájlt ''helloworld.proto'' néven: syntax = "proto3"; // The greeting service definition. service Greeter { // Sends a greeting rpc SayHello (HelloRequest) returns (HelloReply) {} // Sends another greeting rpc SayHelloAgain (HelloRequest) returns (HelloReply) {} } // The request message containing the user's name. message HelloRequest { string name = 1; } // The response message containing the greetings message HelloReply { string message = 1; } Futtassuk a stub generátort az alábbi paranccsal: python -m grpc_tools.protoc -I ./protos/ --grpc_python_out=. --python_out=. .\protos\helloworld.proto A ''helloworld_pb2.py'' és ''helloworld_pb2_grpc.py'' fájlok létrejönnek a gyökérben. A kliens és a szerver kódja az alábbi lesz: ''greeter_client.py'' import grpc import helloworld_pb2 import helloworld_pb2_grpc def run(): print("Will try to greet world ...") with grpc.insecure_channel("localhost:50051") as channel: stub = helloworld_pb2_grpc.GreeterStub(channel) response = stub.SayHello(helloworld_pb2.HelloRequest(name="you")) print("Greeter client received: " + response.message) if __name__ == "__main__": run() ''greeter_server.py'' from concurrent import futures import grpc import helloworld_pb2 import helloworld_pb2_grpc class Greeter(helloworld_pb2_grpc.GreeterServicer): def SayHello(self, request, context): return helloworld_pb2.HelloReply(message="Hello, %s!" % request.name) def serve(): port = "50051" server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server) server.add_insecure_port("[::]:" + port) server.start() print("Server started, listening on " + port) server.wait_for_termination() if __name__ == "__main__": serve() Indítsuk el a szervert és klienst. ==== Haladó lehetőségek ==== https://grpc.io/docs/guides/ * Authentication – Hitelesítési módszerek, beleértve saját mechanizmusok beépítését. * Benchmarking – Teljesítménymérés eszközei és módszerei. * Cancellation – RPC hívások megszakítása. * Compression – Adatok tömörítése az átvitel előtt. * Custom Backend Metrics – Saját metrikák gyűjtése szerver és kliens oldalon. * Custom Load Balancing Policies – Egyedi terheléselosztási szabályok implementálása. * Custom Name Resolution – Névfeloldás testreszabása. * Deadlines – Határidők használata megbízhatatlan háttérszolgáltatások esetén. * Debugging – Hibakeresés grpcdebug eszközzel. * Error Handling – Hibakezelés és státuszkódok értelmezése. * Flow Control – Manuális adatfolyam-vezérlés. * Graceful Shutdown – Szerverek leállítása az ügyfelek megszakítása nélkül. * Health Checking – Egészségügyi ellenőrzés támogatása szerver és kliens oldalon. * Interceptors – Köztes rétegek alkalmazása általános funkcionalitásokhoz. * Keepalive – HTTP/2 alapú kapcsolatébrentartás. * Metadata – Kiegészítő adatok küldése fejlécekkel. * OpenTelemetry Metrics – Megfigyelhetőség, mérőszámok gyűjtése. * Performance Best Practices – Nyelvfüggő teljesítményoptimalizálási tanácsok. * Reflection – Szolgáltatásleírások lekérdezése futásidőben. * Request Hedging – Késleltetett kérések párhuzamos újraküldése. * Retry – Újrapróbálkozás szabályozása részletesen. * Service Config – Szolgáltatáskonfigurációs fájl kliens viselkedés befolyásolására. * Status Codes – Részletes státuszkód lista és jelentések. * Wait-for-Ready – Várakozás, míg a szerver készen áll a kiszolgálásra. ==== Feladatok ==== - Próbáljuk ki a **Deadlines** módszert, hogyan lehet timeout-okat szabályosan kezelni.