【发布时间】:2020-02-07 15:18:29
【问题描述】:
我正在创建一个允许客户端公开接口的 gRPC 服务
我的原型文件:
syntax = "proto3";
package Tests;
import "google/protobuf/any.proto";
message ListenTest1EventStream {
uint64 objectId = 1;
}
message EventTestEvent {
}
service Test1ObjectService {
rpc ListenEvents (ListenTest1EventStream) returns (stream google.protobuf.Any);
}
我的 C# 服务器:
ISomeService
{
event EventHandler<EventArgs> TestEvent;
}
public class Server : Test1ObjectService.Test1ObjectServiceBase
{
private readonly ISomeService _someService;
public Server(ISomeService someService)
{
_someService = someService;
}
public override async Task ListenEvents(ListenTest1EventStream request, IServerStreamWriter<Any> responseStream, ServerCallContext context)
{
// Begin monitoring event handlers, wait indefinitely
var handler = new EventHandler<EventArgs>((sender, args) =>
{
responseStream.WriteAsync(Any.Pack(new EventTestEvent()));
});
_someService.TestEvent += handler;
// TODO: Wait until response stream is forcibly closed. How?
await responseStream.WaitForSatusChangedOrSomething();
_someService.TestEvent -= handler;
}
}
我如何知道客户端何时断开连接?
【问题讨论】: