1. Tổng quan
gRPC là một khung và bộ công cụ cho lệnh gọi quy trình từ xa (RPC) trung lập về ngôn ngữ và nền tảng do Google phát triển. Lớp này cho phép bạn xác định dịch vụ bằng Vùng đệm giao thức, 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 mã giả lập máy khách và máy chủ tương thích từ định nghĩa dịch vụ 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 dịch vụ C# để hiển thị một API bằng khung gRPC. Bạn tương tác với dịch vụ này bằng ứng dụng bảng điều khiển được viết bằng C# và sử dụng cùng một nội dung mô tả dịch vụ với 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.
- 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 sử dụng Google Cloud Platform?
2. Tải xuống và tạo mẫu C# gRPC
Tải các mẫu xuống
Tải kho lưu trữ mẫu C# của gRPC xuống dưới dạng tệp zip và giải nén.
Ngoài ra, bạn có thể sao chép kho lưu trữ git của nó.
git clone https://github.com/meteatamel/grpc-samples-dotnet.git
Dù bằng cách nào thì bạn cũng nên có một thư mục grpc-samples-dotnet
với nội dung sau:
Xây dựng cuộc cách mạng
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 này trong Visual Studio. Bạn sẽ thấy một giải pháp với một số 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 cùng tạo dự án. Chuyển đến Build > Build Solution
hoặc Ctrl + Shift + B
để tạo giải pháp. Thao tác này sẽ tải tất cả phần phụ thuộc từ NuGet xuống 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 dữ liệu đầ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 đó ứng dụng gửi yêu cầu kèm theo tên và máy chủ phản hồi bằng thông báo theo sau là tên. Có một dự án Greeter bao gồm định nghĩa dịch vụ chung (tệp proto) mà ứng dụng 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ủ. Dịch vụ này có 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ụ khai báo một dịch vụ gRPC có tên là GreetingService
. Dịch vụ này có phương thức greeting
nhận HelloRequest
làm dữ liệu đầu vào và HelloResponse
làm đầu ra.
service GreetingService {
rpc greeting(HelloRequest) returns (HelloResponse);
}
Đây là phương thức đơn phân (tức là không truyền trực tuyến), trong đó ứng dụng gửi một yêu cầu 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 tên là generate_protos.bat
. Tập lệnh này có thể được dùng để tạo mã giả lập máy khách và máy chủ từ tệp proto. Dự án đã chứa các mã giả lập máy khách và máy chủ được tạo, vì vậy, bạn không phải tự tạo các mã này. Tuy nhiên, nếu bạn thay đổi điều gì đó về tệp định nghĩa dịch vụ, bạn sẽ cần phải chạy tập lệnh này để tạo lại các mã giả lập.
Máy chủ của Hy Lạp
Đâ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 phương thức triển khai cổng và máy chủ. Lớp quan trọng là GreeterServiceImpl.cs
. Hàm này có một phương thức greeting
giúp triển khai chức năng thực tế.
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. Lớp này cũng có Program.cs
làm điểm truy cập. Công cụ này tạo một kênh để giao tiếp với máy chủ rồi tạo một ứng dụng khách với kênh này từ mã giả lập đã tạo. Sau đó, mã này sẽ tạo một yêu cầu rồi gửi yêu cầu đó đến máy chủ bằng mã ứng dụng khách.
4. Chạy mẫu Greeter
Trước tiên, hãy khởi động Máy chủ Greeter. Mở cửa sổ lệnh rồi 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 Ứng dụng Greeter. 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 máy khách gửi yêu cầu và nhận 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 quy trình cập nhật dịch vụ của chúng tôi. Thêm một phương thức mới vào dịch vụ gRPC của chúng tôi có tên là "tạm biệt". Phương thức này sẽ trả về lời tạm biệt thay vì gửi lời chào đến ứng dụng 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 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 mã giả lập, bạn có thể cần làm mới dự án Visual Studio của mình để nhận mã mới.
Cuối cùng, hãy cập nhật mã ứng dụng và mã máy chủ để tận dụng phương thức mới này. Trong dịch vụ, 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 rồi chạy lại máy chủ và ứng dụng. Giờ bạn sẽ thấy khách hàng nhận được thông báo 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, còn có một dự án ChatServer
và ChatWindowsClient
trong giải pháp này. Đúng như tên gọi, đây là cặp ứng dụng và máy chủ dành cho ứng dụng trò chuyện đơn giản. Dự án Chat
có tệp định nghĩa dịch vụ tên là chat.proto
. Định nghĩa này xác định 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 biến kết nối thành một luồng hai chiều nơi ứng dụng và máy chủ có thể gửi thông báo cho nhau bất kỳ lúc nào; giải pháp hoàn hảo cho ứng dụng trò chuyện.
Bạn có thể khám phá thêm, tạo và chạy mẫu để xem mẫu hoạt động như một bài tập như thế nào.
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 cho Visual Studio.