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

标签 c# client-server protocol-buffers grpc

我正在尝试创建一个程序,以便客户端能够相互发送消息。因此,当客户端发送消息时,该消息将发送到服务器,服务器将其发送到接收方客户端。我遇到的问题是,如果客户端不先发送消息,服务器就无法向客户端发送消息,因此如果客户端不先发送任何内容,客户端如何通过服务器简单地从另一个客户端接收消息。

这是我的原型(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/

相关文章:

c# 日期格式不显示本地格式

c# - 整数常量太大 (CS1021) - 如何将 1000 个非常大(超过 70 位)的整数放入数组中?

java - 检索插入数字的双倍——客户端服务器编程

java - 如果长时间不活动,java.net.DatagramSocket 将等待客户端请求多长时间?

python - key 错误 : Frozen Tensorflow Model to UFF graph

javascript - 执行了 ajax 请求。如何格式化返回的数据?

javascript - 如何在 jquery 中获取 viewbag 数据?

java - 在服务器上关闭 AtomicBoolean ching 太晚了(Java)

protocol-buffers - Avro 尺寸太大?

inheritance - 如何将 : 1. ISerialized 与 Serializer.Merge/Serialize & 2. ProtoIninclude 与 RuntimeTypeModel.Default 一起使用?