Ответ 1
Как я понял вопрос. Вы хотите отправить сообщение конкретному клиенту в gRPC. Это очень возможно при использовании Server side streaming
или Bi-directional
потоковой передачи в gRPC.
Например:
Определение потоковой передачи на стороне сервера или биди потоковой передачи 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 streaming rpc. Надеюсь, это ответит на ваш вопрос