是否可以仅从gRPC服务器流式传输到某些客户端?
我相信我正在寻找的东西就像Pusher,你有一个客户的频道,你可以发布只有有权访问该频道的客户才能看到的消息。
我正在努力解决的是我们需要采取哪些步骤来做这样的事情。
考虑网络套接字我相信我们可以存储每个客户端连接,然后我们就可以找到该连接并发送消息。我们如何使用gRPC
做类似的事情?
答案 0 :(得分:6)
据我了解这个问题。您希望将消息发送到gRPC中的特定客户端。在gRPC中使用Server side streaming
或Bi-directional
流媒体非常有可能。
例如:
定义服务器端流式传输或bidi流式传输api
rpc ListFeatures(Rectangle) returns (stream Feature) {}
在服务器端:
func ListFeatures(rect *pb.Rectangle, stream pb.RouteGuide_ListFeaturesServer) error {
// Save this stream instance in the server on a map or other suitable data structure
// so that you can query for this stream instance later
// This will act same like your websocket session
}
如果您想向特定客户发送内容,请获取 流实例并执行
err := stream.Send(feature); // Any times as required
在客户端,它将等待这样的消息
stream, err := client.ListFeatures(ctx, rect)
for {
feature, err := stream.Recv()
...
// handle message here
}
对于bidi流式传输rpc也可以做同样的事情。我希望这能回答你的问题