Как отправлять сообщения между клиентами через сервер, используя grpc? - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь создать программу, чтобы клиенты могли отправлять сообщения друг другу.Поэтому, когда клиент отправляет сообщение, оно отправляется на сервер, который отправляет его клиенту-получателю.проблема, с которой я сталкиваюсь, заключается в том, что у сервера нет возможности отправлять сообщения клиенту без того, чтобы этот клиент сначала отправлял сообщение, поэтому как клиент может просто получить сообщение от другого клиента через сервер, если он сначала ничего не отправляет.

это мой прото-файл:

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) отправить сообщение с сервера клиенту, который имеет тот же идентификатор, что и идентификатор приемника, указанный в сообщении

ИЛИ

2) Я слышал, что у вас могут быть клиенты, подписывающиеся на сообщения от некоторых клиентов, но я не могу найти ничего о том, как это сделать

любая помощь приветствуется!спасибо

1 Ответ

0 голосов
/ 23 октября 2018

Все 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), чтобы сервер мог фильтровать возвращающиеся сообщения и т. Д., Это не проблема gRPC.

...