本文介绍了GRPC GO:如何在服务器端知道客户端何时关闭连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用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

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

在服务器端流中,您可以将客户端从

断开
<-grpc.ServerStream.Context.Done()

信号。

有了上面的内容,您可以在Go例程中实现您自己的通道来构建您的逻辑。将select语句用作:

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

我提供了一些详细的代码here

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

req, err := grpc.ServerStream.Recv()
if err == io.EOF {
    break
} else if err != nil {
    return err
}

这篇关于GRPC GO:如何在服务器端知道客户端何时关闭连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-20 00:15