iT邦幫忙

2025 iThome 鐵人賽

DAY 10
1
Software Development

30 天的 .Net gRPC 迷途系列 第 10

Day10 gRPC Client Stream 建立

  • 分享至 

  • xImage
  •  

延續前面的 Stream,這邊介紹 gRPC 裡面的 Client Stream

Server

.proto 檔內容如下,延續前一篇的繼續在裡面新增,改成在 Request 那邊新增 stream

service StreamdemoService {
	//...
	rpc HelloClientStream (stream StreamRequest) returns (StreamReply);
}

StreamDemoService.cs 實作這個方法

//...
public override async Task<StreamReply> HelloClientStream(IAsyncStreamReader<StreamRequest> requestStream, ServerCallContext context)
{
    await foreach (var item in requestStream.ReadAllAsync())
    {
        // Do something
    }

    // or
    while (await requestStream.MoveNext())
    {
        var currentItem = requestStream.Current;
        // Do something
    }
    
    return new StreamReply() { Message = "HelloWithClientCount Done" };
}

Client

Program.cs 內新增

// 一樣需要有 channel 跟 client
GrpcChannel channel = GrpcChannel.ForAddress("https://localhost:7204");
var client = new StreamdemoService.StreamdemoServiceClient(channel);

// 宣告使用 client stream
using var clientStream = client.HelloClientStream();

for (var i = 0; i < 3; i++)
{
    // 要傳到 server 的資訊
    await clientStream.RequestStream.WriteAsync(new StreamRequest() { Name = "Client Stream Demo", Count = i });
}

// 傳送結束呼叫
await clientStream.RequestStream.CompleteAsync();

// 取得結果
var response = await clientStream // or clientStream.ResponseAsync;

以上


上一篇
Day9 gRPC Server Stream 建立
系列文
30 天的 .Net gRPC 迷途10
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言