gRPC私人频道

时间:2018-03-12 08:01:14

标签: go grpc

是否可以仅从gRPC服务器流式传输到某些客户端?

我相信我正在寻找的东西就像Pusher,你有一个客户的频道,你可以发布只有有权访问该频道的客户才能看到的消息。

我正在努力解决的是我们需要采取哪些步骤来做这样的事情。

考虑网络套接字我相信我们可以存储每个客户端连接,然后我们就可以找到该连接并发送消息。我们如何使用gRPC做类似的事情?

1 个答案:

答案 0 :(得分:6)

据我了解这个问题。您希望将消息发送到gRPC中的特定客户端。在gRPC中使用Server side streamingBi-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也可以做同样的事情。我希望这能回答你的问题