当前位置: > > > > 如何使用 gRPC 服务器流检测 Cloud Run 中取消/丢失/关闭的连接?
如何使用 gRPC 服务器流检测 Cloud Run 中取消/丢失/关闭的连接?
来源:stackoverflow
2024-05-01 10:06:35
0浏览
收藏
大家好,我们又见面了啊~本文《如何使用 gRPC 服务器流检测 Cloud Run 中取消/丢失/关闭的连接?》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~
问题内容
我在 google cloud run 上托管了一个服务器端流式 rpc。
具有以下原型定义:
syntax = "proto3";
package test.v1;
service myservice {
// subscribe to a stream of events.
rpc subscribe (subscriberequest) returns (stream subscriberesponse) {}
}
message subscriberequest {
}
message subscriberesponse {
}
使用 bloomrpc/grpcurl,当我停止该方法时,我会收到 stream.context().done() 事件,我可以使用它来正常停止某些任务。以下是订阅方法的示例:
func (s *myService) Subscribe(req *pb.SubscribeRequest, stream pb.Instruments_SubscribeServer) error {
// Create a channel for this client.
ch := make(chan *pb.SubscribeResponse)
// Add the channel object 'ch' to a Global list of channels where we have a 'broadcaster' sending
// messages to all connected clients.
// TODO: pass to broadcaster client list.
for {
select {
case <-stream.Context().Done():
close(ch)
fmt.Println("Removed client from global list of channels")
return nil
case res := <-ch:
_ = stream.Send(res)
}
}
}
在客户端,当我在本地测试服务时(即在 golang 中运行本地 grpc 服务器),使用 bloomrpc/grpcurl 每当我 停止 bloomrpc/grpcurl 连接。这是预期的行为。
但是,以相同的方式(通过 bloomrpc/grpcurl)在 cloud run 上运行完全相同的代码,我没有收到 stream.context().done() 消息 – 任何原因都会导致这种情况不同谷歌云运行?查看 cloud run 日志,对 subscribe 方法的调用实际上会“挂起”,直到请求超时。
解决方案
我需要拨打 才能实现此功能。
文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《如何使用 gRPC 服务器流检测 Cloud Run 中取消/丢失/关闭的连接?》文章吧,也可关注米云公众号了解相关技术文章。
