如何使用grpc通过服务器在客户端之间发送消息?

时间:2018-10-22 21:57:17

标签: c# client-server protocol-buffers grpc

我正在尝试创建一个程序,以便客户端能够相互发送消息。因此,当客户端发送消息时,该消息将发送到服务器,服务器再将其发送到接收方客户端。问题在于,如果没有该客户端先发送消息,服务器就无法将消息发送给客户端,因此,如果客户端未先发送任何消息,那么客户端如何通过服务器简单地从另一个客户端接收消息。

这是我的原始文件:

service Messenger {
    rpc SendMessage (stream Message) returns (stream Message) {}
}

message Message {
  string msg = 1;
  receiverId = 2;
}

我还生成了类文件,并按照以下示例编写了用于发送消息的客户端和服务器功能:https://github.com/grpc/grpc/blob/v1.15.0/examples/csharp/RouteGuide/RouteGuideServer/RouteGuideImpl.cs。目前,它仅允许客户端将消息发送到服务器。我现在正在寻找一种解决方法

1)将消息从服​​务器发送到与消息中指定的receiveId相同的ID的客户端

OR

2)香港专业教育学院听说您可以让客户以某种方式订阅某些客户的邮件,但是我找不到任何方法

感谢您的帮助!谢谢

1 个答案:

答案 0 :(得分:0)

所有RPC由客户端启动。
https://grpc.io/docs/guides/concepts.html

从服务器向客户端发送消息意味着客户端接收到一条消息。发送和接收(订阅)是不同的操作。 Messenger服务可以是这样的:

service Messenger {
  rpc SendMessage (Message) returns (google.protobuf.Empty) {}
  rpc SubscribeMessages (google.protobuf.Empty) returns (stream Message) {}
}

仅供参考,我使用gRPC作为示例实现制作了聊天服务器-客户端应用程序。 https://github.com/cactuaroid/GrpcWpfSample

如果要标识客户端,可以指定SubscribeMessages(id)之类的id,以便服务器可以过滤返回的消息等,这不是gRPC的问题。

相关问题