這邊開始介紹, gRPC 裡面的 Server Stream 該怎麼進行,下面先來做一下前置作業
.proto
檔設定如下
syntax = "proto3";
// Server/Client 記得調整對應的 namespace
option csharp_namespace = "MyGrpcServer";
package streamDemo;
service StreamdemoService {
rpc HelloReplyWithCount (StreamRequest) returns (stream StreamReply);
}
message StreamRequest{
string Name = 1;
int32 Count = 2;
}
message StreamReply{
string Message = 1;
}
接著新增一個 StreamDemoService.cs
檔
using Grpc.Core;
namespace MyGrpcServer.Services
{
public class StreamDemoService : StreamdemoService.StreamdemoServiceBase
{
public override async Task HelloReplyWithCount(StreamRequest request,
IServerStreamWriter<StreamReply> responseStream,
ServerCallContext context)
{
int count = request.Count;
for (int i = 0; i <= count; i++)
{
await responseStream.WriteAsync(new StreamReply() { Message = $"Hello {request.Name},Reply Count: {i}" });
}
}
}
}
Program.cs
記得要 Map 上面的服務,這樣才能正確的啟動
app.MapGrpcService<StreamDemoService>();
GrpcChannel channel = GrpcChannel.ForAddress("https://localhost:7204");
var client = new StreamdemoService.StreamdemoServiceClient(channel);
var res = client.HelloReplyWithCount(new StreamRequest() { Name = "Server Stream Demo", Count = 5 });
await foreach (var item in res.ResponseStream.ReadAllAsync())
{
Console.WriteLine(item.Message);
};
這樣我們就能啟動一個基本的 ServerStream 服務了