Sobes.tech
Junior — Middle

Explique o conceito de transmissão de dados bidirecional no gRPC.

sobes.tech IA

Resposta da IA

A transmissão de dados bidirecional (streaming bidirecional) no gRPC permite que o cliente e o servidor enviem e recebam fluxos de mensagens simultaneamente dentro de uma única conexão.

Isto significa que ambas as partes podem transmitir dados de forma independente e paralela, o que é útil para cenários de troca interativa, como chat, atualização de dados em streaming ou comunicação bidirecional em tempo real.

Em C#, isto é implementado através de métodos assíncronos que retornam um objeto AsyncDuplexStreamingCall<TRequest, TResponse>. O cliente e o servidor podem ler e escrever mensagens no fluxo de forma assíncrona.

Exemplo de uso no lado do servidor:

public override async Task Chat(
    IAsyncStreamReader<ChatMessage> requestStream,
    IServerStreamWriter<ChatMessage> responseStream,
    ServerCallContext context)
{
    await foreach (var message in requestStream.ReadAllAsync())
    {
        Console.WriteLine($"Recebido: {message.Text}");
        await responseStream.WriteAsync(new ChatMessage { Text = "Eco: " + message.Text });
    }
}

Aqui, o servidor lê mensagens do cliente e envia uma resposta imediatamente, mantendo um fluxo bidirecional de dados.