我正在尝试创建一个程序,以便客户端能够相互发送消息。因此,当客户端发送消息时,该消息将发送到服务器,服务器将其发送到接收方客户端。我遇到的问题是,如果客户端不先发送消息,服务器就无法向客户端发送消息,因此如果客户端不先发送任何内容,客户端如何通过服务器简单地从另一个客户端接收消息。
这是我的原型(prototype)文件:
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) 从服务端向客户端发送与消息中指定的receiverId相同id的消息
或
2) 我听说你可以让客户以某种方式订阅来自某些客户的消息,但我找不到任何关于如何做到这一点的信息
感谢任何帮助!谢谢
最佳答案
所有的RPC都是由客户端发起的。
https://grpc.io/docs/guides/concepts.html
从服务器向客户端发送消息意味着客户端收到消息。发送和接收(订阅)是不同的操作。信使服务可以是这样的:
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的问题。
关于c# - 如何使用grpc通过服务器在客户端之间发送消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52938306/