1. Omówienie
gRPC to neutralna dla języka platforma i zbiór narzędzi opracowane przez Google do zdalnego wywoływania procedur (RPC). Umożliwia definiowanie usługi za pomocą buforów protokołów, czyli szczególnie zaawansowanych narzędzi i języka do serializacji plików binarnych. Następnie umożliwia generowanie idiomatycznych skrótów klientów i serwerów z definicji usługi w różnych językach.
Z tego ćwiczenia w Codelabs dowiesz się, jak za pomocą platformy gRPC utworzyć usługę w języku C# udostępniającą interfejs API. Z tej usługi możesz korzystać za pomocą klienta konsoli napisanego w języku C#, który korzysta z tego samego opisu usługi co usługa.
Czego się nauczysz
- Język bufora protokołu.
- Jak wdrożyć usługę gRPC za pomocą języka C#.
- Jak wdrożyć klienta gRPC za pomocą języka C#.
- Jak zaktualizować usługę gRPC.
Czego potrzebujesz
- Przeglądarka, na przykład Chrome lub Firefox.
- Zainstalowano pakiet Visual Studio 2013 lub nowszy.
- Znajomość platformy .NET Framework i języka C#.
Jak wykorzystasz ten samouczek?
Jak oceniasz swoje doświadczenia z Google Cloud Platform?
2. Pobierz i utwórz przykłady C# gRPC
Pobierz przykłady
Pobierz przykładowe repozytorium gRPC C# jako plik ZIP i rozpakuj je.
Możesz też skopiować jego repozytorium Git.
git clone https://github.com/meteatamel/grpc-samples-dotnet.git
W obu przypadkach musisz mieć folder grpc-samples-dotnet
z tą zawartością:
Utwórz rozmowę
Przykładowy folder aplikacji zawiera GrpcSamples.sln
– rozwiązanie Visual Studio. Kliknij dwukrotnie, aby otworzyć rozwiązanie w Visual Studio. Powinno pojawić się rozwiązanie z większą liczbą projektów.
W następnej sekcji omówimy bardziej szczegółowo projekty, ale najpierw zajmijmy się tylko stworzeniem projektu. Przejdź do Build > Build Solution
lub Ctrl + Shift + B
, aby utworzyć rozwiązanie. Spowoduje to pobranie wszystkich zależności z NuGet, a następnie skompilowanie aplikacji.
Na koniec w danych wyjściowych konsoli Visual Studio powinien pojawić się komunikat Build succeeded
.
3. Poznaj fragment Greeter
Greeter to prosty przykład gRPC, w którym klient wysyła żądanie z nazwą, a serwer odpowiada z komunikatem, po którym następuje nazwa. Istnieje projekt Greeter zawierający definicję usługi (plik protokołu), na której opierają się klient i serwer.
Projekt Greeter
Jest to wspólny projekt używany przez klienta i serwer. Zawiera on greeter.proto
, który jest definicją usługi gRPC używaną przez klient i serwer. Definicja usługi definiuje usługę gRPC o nazwie GreetingService
i ma ona metodę greeting
, która przyjmuje HelloRequest
jako dane wejściowe i HelloResponse
jako dane wyjściowe.
service GreetingService {
rpc greeting(HelloRequest) returns (HelloResponse);
}
Jest to metoda jednoargumentowa (brak strumieniowania), w której klient wysyła jedno żądanie i otrzymuje jedną odpowiedź z serwera. Możesz zapoznać się z pozostałą zawartością greeter.proto.
. Ten projekt zawiera też skrypt o nazwie generate_protos.bat
, którego można użyć do generowania atrakcji klienta i serwera z pliku proto. Projekt zawiera już wygenerowane atrapy klienta i serwera, więc nie musisz ich generować samodzielnie. Jeśli jednak zmienisz coś w pliku definicji usługi, musisz uruchomić ten skrypt, aby ponownie wygenerować atrapy.
Serwer powitalny
To jest projekt serwera gRPC. Program.cs
to główny punkt wejścia, w którym konfigurowana jest implementacja portu i serwera. Ważna klasa to GreeterServiceImpl.cs
. Zawiera on metodę greeting
, w której zaimplementowano właściwą funkcję.
public override Task<HelloResponse> greeting(HelloRequest request,
ServerCallContext context)
{
return Task.FromResult(new HelloResponse {
Greeting = "Hello " + request.Name });
}
Klient powitalny
To jest strona klienta usługi gRPC. Również Program.cs
jako punkt wejścia. Tworzy kanał komunikacyjny z serwerem, a następnie tworzy klienta korzystającego z kanału z wygenerowanego namiaru. Następnie tworzy żądanie i wysyła je do serwera przy użyciu atrapy klienta.
4. Uruchamianie przykładowego programu Greeter
Najpierw uruchom serwer powitalny. Otwórz wiersz polecenia i przejdź do folderu bin > Debug
na serwerze Greeter, a następnie uruchom plik wykonywalny. Serwer powinien nasłuchiwać.
> C:\grpc-samples-dotnet\GreeterServer\bin\Debug>GreeterServer.exe
GreeterServer listening on port 50051
Press any key to stop the server...
Następnie uruchom klienta Greeter. W osobnym wierszu poleceń przejdź do folderu bin > Debug
na serwerze Greeter i uruchom plik wykonywalny. Powinien pojawić się klient wysyłający żądanie i otrzymujący odpowiedź z serwera.
> C:\grpc-samples-dotnet\GreeterClient\bin\Debug>GreeterClient.exe
GreeterClient sending request
GreeterClient received response: Hello Mete - on C#
Press any key to exit...
5. Aktualizowanie fragmentu powitalnego
Zobaczmy, jak wygląda aktualizacja naszej usługi. Dodaj do naszej usługi gRPC nową metodę o nazwie „do widzenia”, która zwraca „do widzenia” zamiast „hello” dla klienta.
Pierwszym krokiem jest zaktualizowanie pliku definicji usługi greeter.proto.
service GreetingService {
rpc greeting(HelloRequest) returns (HelloResponse);
rpc goodbye(HelloRequest) returns (HelloResponse);
}
Następnie musisz ponownie wygenerować atrapy klienta i serwera. W wierszu polecenia uruchom polecenie generate_protos.bat
. Po wygenerowaniu wersji pośrednich może być konieczne odświeżenie projektów Visual Studio w celu pobrania zaktualizowanego kodu.
Na koniec zaktualizuj kod klienta i serwera, aby zacząć korzystać z nowej metody. W usłudze zaktualizuj metodę GreeterServiceImpl.cs
i dodaj nową metodę goodbye
.
public override Task<HelloResponse> goodbye(HelloRequest request,
ServerCallContext context)
{
return Task.FromResult(new HelloResponse {
Greeting = "Goodbye " + request.Name });
}
Wywołaj z poziomu klienta metodę goodbye
w Program.cs.
response = client.goodbye(request);
Console.WriteLine("GreeterClient received response: "
+ response.Greeting);
Skompiluj projekt od nowa oraz jeszcze raz uruchom serwer i klienta. Teraz klient powinien otrzymać wiadomość pożegnalną.
> C:\grpc-samples-dotnet\GreeterClient\bin\Debug>GreeterClient.exe
GreeterClient sending request
GreeterClient received response: Hello Mete - on C#
GreeterClient received response: Goodbye Mete - on C#
Press any key to exit...
6. Poznawanie fragmentu Google Chat
W rozwiązaniu znajdują się również projekty ChatServer
i ChatWindowsClient
. Jak sama nazwa wskazuje, jest to para klient i serwer dla prostej aplikacji czatu. Projekt Chat
ma plik definicji usługi o nazwie chat.proto
. Definiuje funkcję ChatService
z metodą chat
.
service ChatService {
rpc chat(stream ChatMessage) returns (stream ChatMessageFromServer);
}
Pamiętaj, że zarówno przychodzące, jak i wychodzące wiadomości czatu są oznaczane za pomocą słowa kluczowego stream
. Zasadniczo powoduje to zmianę połączenia w dwukierunkowy strumień, z którego klient i serwer mogą w dowolnym momencie wysyłać do siebie wiadomości. to idealne rozwiązanie
dla aplikacji do obsługi czatu.
Możesz dokładniej zapoznać się z przykładem, skompilować go i uruchomić, aby zobaczyć, jak to działa.
7. Gratulacje!
Omówione zagadnienia
- język bufora protokołu.
- Jak wdrożyć usługę gRPC za pomocą języka C#.
- Jak wdrożyć klienta gRPC za pomocą języka C#.
- Jak zaktualizować usługę gRPC.
Następne kroki
- Dowiedz się więcej o systemie Windows w Google Cloud Platform.
- Dowiedz się więcej o .NET w Google Cloud Platform.
- Dowiedz się więcej o narzędziach Cloud dla Visual Studio.