Серверный поток¶
Клиент инициирует удалённый вызов процедуры с помощью указания имени метода, метаданных и сообщения запроса. Затем он получает поток от сервера. Сервер возвращает gRPC-cтатус только после того, как все запрошенные данные переданы. Вот как это выглядит на диаграмме.
Диаграмма¶
sequenceDiagram
participant C as gRPC Client
participant S as gRPC Server
C->>S: Имя метода + сообщение запроса (request message) + метаданные
S->>C: Сообщение 1
S->>C: Сообщение 2
S->>C: Сообщение 3
S->>C: gRPC-статус + метаданные
Protobuf¶
Реализация на сервере¶
public override async Task ServerStreamingFunction(InputMessage request, IServerStreamWriter<OutputMessage> responseStream, ServerCallContext context)
{
// итерируемся по IEnumerable<OutputMessage> или IAsyncEnumerable<OutputMessage>
foreach (var outputMessage in outputMessageEnumerable)
{
await responseStream.WriteAsync(outputMessage);
}
}
Использование на клиенте¶
using var serverStreamingCall = client.ServerStreamingFunction(new InputMessage {/*заполняем поля*/});
//Итерируемся по IAsyncEnumerable до тех пор, пока сервер не закончит передачу
await foreach (OutputMessage response in serverStreamingCall.ResponseStream.ReadAllAsync())
{
// обработка сообщения
}
Ссылки¶
Диаграммы всех видов взаимодействия
примеры Protobuf
Примеры реализаций на сервере
Пример клиента
Последнее обновление :
23 апреля 2023 г.
Дата создания : 23 апреля 2023 г.
Дата создания : 23 апреля 2023 г.