我有一個(gè)服務(wù)器端流媒體RPC托管在Google Cloud Run上。具有以下原型定義: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,當(dāng)我停止該方法時(shí),我得到一個(gè)事件,我可以用來(lái)優(yōu)雅地停止某些任務(wù)。以下是 Suscribe 方法的一個(gè)示例: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) } }}在客戶端,當(dāng)我在本地測(cè)試服務(wù)(即在Golang中運(yùn)行本地gRPC服務(wù)器)時(shí),使用BloomRPC / grpcurl,每當(dāng)我停止BloomRPC / grpcurl連接時(shí),我都會(huì)在通道上收到一條消息。這是預(yù)期的行為。stream.Context().Done()但是,以相同的方式(通過(guò)BloomRPC / grpcurl)在Cloud Run上運(yùn)行完全相同的代碼,我沒(méi)有收到消息 - 為什么這在Google Cloud Run上會(huì)有所不同?查看 Cloud Run 日志,對(duì) Subscribe 方法的調(diào)用基本上會(huì)“掛起”,直到請(qǐng)求達(dá)到其超時(shí)。stream.Context().Done()
- 1 回答
- 0 關(guān)注
- 129 瀏覽
添加回答
舉報(bào)
0/150
提交
取消