1. Tổng quan
gRPC là một khung và bộ công cụ lệnh gọi quy trình từ xa (RPC) không phân biệt ngôn ngữ và nền tảng do Google phát triển. Nó cho phép bạn xác định một dịch vụ bằng cách sử dụng vùng đệm giao thức, một bộ công cụ và ngôn ngữ chuyển đổi tuần tự nhị phân đặc biệt mạnh mẽ. Sau đó, bạn có thể tạo các phần giữ chỗ máy chủ và ứng dụng theo thành ngữ từ định nghĩa dịch vụ của mình bằng nhiều ngôn ngữ.
Trong lớp học lập trình này, bạn sẽ tìm hiểu cách tạo một dịch vụ C# cung cấp API bằng khung gRPC. Bạn tương tác với dịch vụ này bằng cách sử dụng một ứng dụng bảng điều khiển được viết bằng C# và sử dụng cùng nội dung mô tả dịch vụ như dịch vụ.
Kiến thức bạn sẽ học được
- Ngôn ngữ Vùng đệm giao thức.
- Cách triển khai dịch vụ gRPC bằng C#.
- Cách triển khai ứng dụng gRPC bằng C#.
- Cách cập nhật dịch vụ gRPC.
Bạn cần có
- Một trình duyệt, chẳng hạn như Chrome hoặc Firefox.
- Đã cài đặt Visual Studio 2013 trở lên.
- Quen thuộc với .NET Framework và ngôn ngữ C#.
Bạn sẽ sử dụng hướng dẫn này như thế nào?
Bạn đánh giá thế nào về trải nghiệm của mình với Google Cloud Platform?
2. Tải xuống và tạo các mẫu gRPC C#
Tải mẫu xuống
Tải kho lưu trữ mẫu gRPC C# xuống dưới dạng tệp zip rồi giải nén tệp đó.
Ngoài ra, bạn có thể sao chép kho lưu trữ git của ứng dụng.
git clone https://github.com/meteatamel/grpc-samples-dotnet.git
Dù bằng cách nào, bạn cũng phải có một thư mục grpc-samples-dotnet có nội dung sau:

Xây dựng giải pháp
Thư mục ứng dụng mẫu chứa GrpcSamples.sln, một giải pháp Visual Studio. Nhấp đúp để mở giải pháp trong Visual Studio. Bạn sẽ thấy một giải pháp có nhiều dự án.

Chúng ta sẽ tìm hiểu chi tiết hơn về các dự án trong phần tiếp theo, nhưng trước tiên, hãy tạo dự án. Chuyển đến Build > Build Solution hoặc Ctrl + Shift + B để xây dựng giải pháp. Thao tác này sẽ tải tất cả các phần phụ thuộc xuống từ NuGet rồi biên dịch ứng dụng.
Cuối cùng, bạn sẽ thấy thông báo Build succeeded trong đầu ra của bảng điều khiển Visual Studio.
3. Khám phá mẫu Greeter
Greeter là một mẫu gRPC đơn giản, trong đó một ứng dụng gửi yêu cầu kèm theo tên và máy chủ phản hồi bằng một thông báo kèm theo tên. Có một dự án Greeter bao gồm định nghĩa dịch vụ chung (tệp proto) mà máy khách và máy chủ dựa vào.
Dự án Greeter
Đây là dự án chung được chia sẻ giữa ứng dụng và máy chủ. Nó có một greeter.proto là định nghĩa dịch vụ gRPC mà ứng dụng và máy chủ sử dụng. Định nghĩa dịch vụ xác định một dịch vụ gRPC có tên là GreetingService và có một phương thức greeting nhận HelloRequest làm đầu vào và HelloResponse làm đầu ra.
service GreetingService {
rpc greeting(HelloRequest) returns (HelloResponse);
}
Đây là một phương thức đơn nguyên (tức là không truyền trực tuyến) trong đó máy khách gửi một yêu cầu duy nhất và nhận một phản hồi duy nhất từ máy chủ. Bạn có thể khám phá phần còn lại của nội dung greeter.proto. Dự án này cũng có một tập lệnh có tên là generate_protos.bat mà bạn có thể dùng để tạo các phần giữ chỗ máy khách và máy chủ từ tệp proto. Dự án đã chứa các phần giữ chỗ máy chủ và máy khách được tạo, vì vậy bạn không phải tự tạo các phần giữ chỗ này. Tuy nhiên, nếu thay đổi nội dung nào đó trong tệp định nghĩa dịch vụ, bạn sẽ cần chạy tập lệnh này để tạo lại các phần giữ chỗ.
Greeter Server
Đây là dự án dành cho máy chủ gRPC. Program.cs là điểm truy cập chính, nơi thiết lập cổng và quá trình triển khai máy chủ. Lớp quan trọng là GreeterServiceImpl.cs. Nó có một phương thức greeting nơi chức năng thực tế được triển khai.
public override Task<HelloResponse> greeting(HelloRequest request,
ServerCallContext context)
{
return Task.FromResult(new HelloResponse {
Greeting = "Hello " + request.Name });
}
Ứng dụng Greeter
Đây là phía máy khách của dịch vụ gRPC. Nó cũng có Program.cs làm điểm truy cập. Thao tác này sẽ tạo một kênh để giao tiếp với máy chủ, sau đó tạo một ứng dụng khách bằng kênh từ mã giả lập đã tạo. Sau đó, ứng dụng sẽ tạo một yêu cầu và gửi yêu cầu đó đến máy chủ bằng cách sử dụng mã giả lập của ứng dụng.
4. Chạy mẫu Greeter
Trước tiên, hãy khởi động Greeter Server. Mở dấu nhắc lệnh, chuyển đến thư mục bin > Debug của Greeter Server rồi chạy tệp thực thi. Bạn sẽ thấy máy chủ đang lắng nghe.
> C:\grpc-samples-dotnet\GreeterServer\bin\Debug>GreeterServer.exe
GreeterServer listening on port 50051
Press any key to stop the server...
Tiếp theo, hãy chạy Greeter Client. Trong một dấu nhắc lệnh riêng, hãy chuyển đến thư mục bin > Debug của Greeter Server rồi chạy tệp thực thi. Bạn sẽ thấy ứng dụng gửi yêu cầu và nhận được phản hồi từ máy chủ.
> 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. Cập nhật mẫu Greeter
Hãy xem quá trình cập nhật dịch vụ của chúng tôi diễn ra như thế nào. Thêm một phương thức mới vào dịch vụ gRPC của chúng ta có tên là goodbye, phương thức này sẽ trả về goodbye thay vì hello cho máy khách.
Bước đầu tiên là cập nhật tệp định nghĩa dịch vụ greeter.proto.
service GreetingService {
rpc greeting(HelloRequest) returns (HelloResponse);
rpc goodbye(HelloRequest) returns (HelloResponse);
}
Tiếp theo, bạn cần tạo lại các mã giả lập máy khách và máy chủ. Trong dấu nhắc lệnh, hãy chạy generate_protos.bat. Sau khi tạo các phần giữ chỗ, có thể bạn cần làm mới dự án Visual Studio để nhận được mã đã cập nhật.
Cuối cùng, hãy cập nhật mã máy khách và máy chủ để tận dụng phương thức mới. Trong dịch vụ này, hãy cập nhật GreeterServiceImpl.cs và thêm một phương thức goodbye mới.
public override Task<HelloResponse> goodbye(HelloRequest request,
ServerCallContext context)
{
return Task.FromResult(new HelloResponse {
Greeting = "Goodbye " + request.Name });
}
Trong ứng dụng, hãy gọi phương thức goodbye trong Program.cs.
response = client.goodbye(request);
Console.WriteLine("GreeterClient received response: "
+ response.Greeting);
Tạo lại dự án và chạy lại máy chủ cũng như ứng dụng. Giờ đây, bạn sẽ thấy ứng dụng nhận được một tin nhắn tạm biệt.
> 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. Khám phá mẫu Chat
Ngoài ra, trong giải pháp còn có các dự án ChatServer và ChatWindowsClient. Như tên gọi cho thấy, đây là một cặp máy khách và máy chủ cho một ứng dụng trò chuyện đơn giản. Dự án Chat có tệp định nghĩa dịch vụ có tên là chat.proto. Nó xác định một ChatService bằng phương thức chat.
service ChatService {
rpc chat(stream ChatMessage) returns (stream ChatMessageFromServer);
}
Điều quan trọng ở đây là cả tin nhắn trò chuyện đến và đi đều được đánh dấu bằng từ khoá stream. Về cơ bản, điều này sẽ biến kết nối thành một luồng hai chiều, trong đó ứng dụng và máy chủ có thể gửi tin nhắn cho nhau bất cứ lúc nào; đây là giải pháp hoàn hảo cho một ứng dụng trò chuyện.
Bạn có thể khám phá thêm về mẫu này, tạo và kích hoạt mẫu để xem cách mẫu hoạt động như một bài tập.
7. Xin chúc mừng!
Nội dung đã đề cập
- Ngôn ngữ vùng đệm giao thức.
- Cách triển khai dịch vụ gRPC bằng C#.
- Cách triển khai ứng dụng gRPC bằng C#.
- Cách cập nhật dịch vụ gRPC.
Các bước tiếp theo
- Tìm hiểu thêm về Windows trên Google Cloud Platform.
- Tìm hiểu thêm về .NET trên Google Cloud Platform.
- Tìm hiểu thêm về Cloud Tools for Visual Studio.