gRPC私人频道

use*_*761 11 go grpc

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

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

我正在努力的是理解我们需要采取什么步骤来做这样的事情.

考虑网络套接字我相信我们可以存储每个客户端连接,然后我们可以找到该连接并发送消息.我们怎么能做类似的事情gRPC

She*_*tyh 6

按照我理解的问题.您希望将消息发送到gRPC中的特定客户端.这在gRPC中使用Server side streamingBi-directional流式传输非常有用.

例如:

定义服务器端流式传输或bidi流式传输API

rpc ListFeatures(Rectangle) returns (stream Feature) {}
Run Code Online (Sandbox Code Playgroud)

在服务器端:

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
}
Run Code Online (Sandbox Code Playgroud)

当您想要向特定客户端发送内容时,请获取流实例并执行此操作

err := stream.Send(feature); // Any times as required
Run Code Online (Sandbox Code Playgroud)

在客户端,它将等待这样的消息

stream, err := client.ListFeatures(ctx, rect)

for {
    feature, err := stream.Recv()
    ...
    // handle message here
}
Run Code Online (Sandbox Code Playgroud)

对于bidi流式传输rpc也可以做同样的事情.我希望这回答了你的问题