grpc go:如何在服务器端知道客户端何时关闭连接

2024-03-23

我正在使用 grpc go

我有一个 rpc,看起来大致像这样

196 service MyService {
197   // Operation 1
198   rpc Operation1(OperationRequest) returns (OperationResponse) {
199       option (google.api.http) = {
200         post: "/apiver/myser/oper1"
201         body: "*"
202     };
203   }

客户端使用 grpc.Dial() 方法连接

当客户端连接时,服务器会进行一些记录。当客户端断开连接时,需要删除簿记。

是否有任何可以注册的回调可用于知道客户端已关闭会话。


根据您的代码,这是一个一元 rpc 调用,客户端仅连接到服务器一次,发送请求并获取响应。客户端将等待响应,直到超时。

在服务器端流式传输中,您可以让客户端断开连接

<-grpc.ServerStream.Context.Done()

signal.

有了上面的内容,您就可以在 go 例程中实现自己的通道来构建您的逻辑。使用select声明为:

select {
    case <-srv.Context().Done():
        return
    case res := <-<YOUR OWN CHANNEL, WITH RECEIVED RESQUEST OR YOUR RESPONSE>
        ....
}

我提供一些详细的代码here https://washanhanzi.github.io/posts/pragmaticgrpc1/#3-an-intermediate-channel

在客户端推流中,除了上述信号外,还可以检查服务器是否可以接收到消息:

req, err := grpc.ServerStream.Recv()
if err == io.EOF {
    break
} else if err != nil {
    return err
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

grpc go:如何在服务器端知道客户端何时关闭连接 的相关文章

随机推荐