dszn2485
dszn2485
2018-03-12 08:01

gRPC专用频道

  • grpc
已采纳

Is it possible to only stream to certain clients from a gRPC server?

I believe what I'm looking for is something like Pusher, where you have a channel for a client and you can publish messages that can be seen only by a client that has access to that channel.

What I'm struggling with is understanding what are the steps we need to take to do something like this.

Thinking about web-sockets I believe we can store each client connection, then we can find that connection and send messages. How can we do a similar thing with gRPC?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • dpvv37755 dpvv37755 3年前

    As per as i understood the question. You want to send the the message to the particular client in gRPC. This is very much possible using Server side streaming or Bi-directional streaming in gRPC.

    For example:

    Define a server side streaming or bidi streaming api

    rpc ListFeatures(Rectangle) returns (stream Feature) {}
    

    On Server side:

    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
    }
    

    When you want to send something to a specific client then get the stream instance and do

    err := stream.Send(feature); // Any times as required
    

    On the client, it will be waiting for messages like this

    stream, err := client.ListFeatures(ctx, rect)
    
    for {
        feature, err := stream.Recv()
        ...
        // handle message here
    }
    

    Same thing can be done for bidi streaming rpc also. I hope this answers your question

    点赞 评论 复制链接分享

为你推荐