我正在使用 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(使用前将#替换为@)