1. Обзор
gRPC — это инфраструктура и набор инструментов удаленного вызова процедур (RPC), не зависящие от языка и платформы, разработанные в Google. Он позволяет определить службу с помощью протокольных буферов — особенно мощного набора инструментов и языка двоичной сериализации. Затем он позволяет генерировать идиоматические клиентские и серверные заглушки на основе определения вашего сервиса на различных языках.
В этой лаборатории кода вы узнаете, как создать службу C#, предоставляющую API с использованием платформы gRPC. Вы взаимодействуете с этой службой с помощью консольного клиента, написанного на C#, который использует то же описание службы, что и сама служба.
Что вы узнаете
- Язык буфера протокола.
- Как реализовать службу gRPC с помощью C#.
- Как реализовать клиент gRPC с помощью C#.
- Как обновить службу gRPC.
Что вам понадобится
- Браузер, например Chrome или Firefox .
- Установлена Visual Studio 2013 или более поздней версии.
- Знакомство с .NET Framework и языком C# .
Как вы будете использовать этот урок?
Как бы вы оценили свой опыт работы с Google Cloud Platform?
2. Загрузите и создайте образцы gRPC C#.
Скачать образец
Загрузите образец репозитория gRPC C# в виде zip-файла и распакуйте его.
Альтернативно вы можете клонировать его репозиторий git.
git clone https://github.com/meteatamel/grpc-samples-dotnet.git
В любом случае у вас должна быть папка grpc-samples-dotnet
со следующим содержимым:
Создайте решение
Папка примера приложения содержит GrpcSamples.sln
— решение Visual Studio. Дважды щелкните, чтобы открыть решение в Visual Studio. Вы должны увидеть решение с несколькими проектами.
Мы рассмотрим проекты более подробно в следующем разделе, но сначала давайте просто создадим проект. Перейдите в Build > Build Solution
или Ctrl + Shift + B
чтобы построить решение. Это позволит загрузить все зависимости из NuGet, а затем скомпилировать приложение.
В конце вы должны увидеть сообщение Build succeeded
в выходных данных консоли Visual Studio.
3. Изучите образец Greet
Greeter — это простой пример gRPC, в котором клиент отправляет запрос с именем, а сервер отвечает сообщением, за которым следует имя. Существует проект Greeter, который включает определение общего сервиса (прото-файл), на котором основаны клиент и сервер.
Приветственный проект
Это общий проект, используемый клиентом и сервером. У него есть greeter.proto
, который является определением службы gRPC, которую используют клиент и сервер. Определение службы определяет службу gRPC под названием GreetingService
и имеет метод greeting
, который принимает HelloRequest
в качестве входных данных и HelloResponse
в качестве выходных данных.
service GreetingService {
rpc greeting(HelloRequest) returns (HelloResponse);
}
Это унарный метод (т. е. без потоковой передачи), при котором клиент отправляет один запрос и получает один ответ от сервера. Вы можете изучить остальное содержимое greeter.proto.
В этом проекте также есть generate_protos.bat
, который можно использовать для создания заглушек клиента и сервера из файла прототипа. Проект уже содержит сгенерированные клиентские и серверные заглушки, поэтому вам не придется генерировать их самостоятельно. Однако если вы что-то измените в файле определения службы, вам нужно будет запустить этот сценарий для повторного создания заглушек.
Приветственный сервер
Это проект для сервера gRPC. Program.cs
— это основная точка входа, где настраивается реализация порта и сервера. Важным классом является GreeterServiceImpl.cs
. У него есть метод greeting
, в котором реализована фактическая функциональность.
public override Task<HelloResponse> greeting(HelloRequest request,
ServerCallContext context)
{
return Task.FromResult(new HelloResponse {
Greeting = "Hello " + request.Name });
}
Приветственный клиент
Это клиентская часть службы gRPC. Он также имеет Program.cs
в качестве точки входа. Он создает канал для связи с сервером, а затем создает клиента с каналом из сгенерированной заглушки. Затем он создает запрос и отправляет его на сервер с помощью клиентской заглушки.
4. Запустите образец Greeter
Сначала запустите сервер Greeter. Откройте командную строку, перейдите в папку bin > Debug
сервера Greeter и запустите исполняемый файл. Вы должны увидеть, что сервер прослушивает.
> C:\grpc-samples-dotnet\GreeterServer\bin\Debug>GreeterServer.exe
GreeterServer listening on port 50051
Press any key to stop the server...
Затем запустите клиент Greeter. В отдельной командной строке перейдите в папку bin > Debug
сервера Greeter и запустите исполняемый файл. Вы должны увидеть, как клиент отправляет запрос и получает ответ от сервера.
> 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. Обновите образец Greeter
Давайте посмотрим, как выглядит обновление нашего сервиса. Добавьте в нашу службу gRPC новый метод под названием Goodbye, который возвращает клиенту «Прощай» вместо «Привет».
Первым шагом является обновление файла определения службы greeter.proto.
service GreetingService {
rpc greeting(HelloRequest) returns (HelloResponse);
rpc goodbye(HelloRequest) returns (HelloResponse);
}
Далее вам необходимо заново создать заглушки клиента и сервера. В командной строке generate_protos.bat
. После создания заглушек вам может потребоваться обновить проекты Visual Studio, чтобы получить обновленный код.
Наконец, обновите код клиента и сервера, чтобы воспользоваться преимуществами нового метода. В службе обновите GreeterServiceImpl.cs
и добавьте новый метод goodbye
.
public override Task<HelloResponse> goodbye(HelloRequest request,
ServerCallContext context)
{
return Task.FromResult(new HelloResponse {
Greeting = "Goodbye " + request.Name });
}
В клиенте вызовите метод goodbye
в Program.cs.
response = client.goodbye(request);
Console.WriteLine("GreeterClient received response: "
+ response.Greeting);
Пересоберите проект и снова запустите сервер и клиент. Вы должны увидеть, что клиент получил прощальное сообщение.
> 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. Изучите образец чата
В решении также есть проекты ChatServer
и ChatWindowsClient
. Как следует из названия, это пара клиента и сервера для простого приложения чата. В проекте Chat
есть файл определения службы с chat.proto
. Он определяет ChatService
с методом chat
.
service ChatService {
rpc chat(stream ChatMessage) returns (stream ChatMessageFromServer);
}
Здесь важно то, что как входящие, так и исходящие сообщения чата помечаются ключевым словом stream
. По сути, это превращает соединение в двунаправленный поток, в котором клиент и сервер могут отправлять сообщения друг другу в любое время; идеальное решение для приложения чата.
Вы можете дополнительно изучить образец, построить и запустить его, чтобы увидеть, как он работает, в качестве упражнения.
7. Поздравляем!
Что мы рассмотрели
- Язык буфера протокола.
- Как реализовать службу gRPC с помощью C#.
- Как реализовать клиент gRPC с помощью C#.
- Как обновить службу gRPC.
Следующие шаги
- Узнайте больше о Windows в Google Cloud Platform .
- Узнайте больше о .NET на Google Cloud Platform .
- Узнайте больше об облачных инструментах для Visual Studio .