本文介绍了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:如何在服务器端知道客户端何时关闭连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!