基于 .NET 7 的 QUIC 实现 Echo 服务( 三 )

到这里,客户端和服务端的代码都完成了,客户端使用Quic 流发送了一些消息给服务端,服务端收到消息后在控制台输出,并回复一个 Ack 消息,因为我们创建了一个双向流 。
程序的运行结果如下

基于 .NET 7 的 QUIC 实现 Echo 服务

文章插图
我们上面说到了一个 QuicConnection 可以创建多个流,并行传输数据 。
改造一下服务端的代码,支持接收多个 Quic 流 。
var cts = new CancellationTokenSource();while (!cts.IsCancellationRequested){var stream = await connection.AcceptInboundStreamAsync();Console.WriteLine($"Stream [{stream.Id}]: created");Console.WriteLine();_ = ProcessLinesAsync(stream);} Console.ReadKey();对于客户端,我们用多个线程创建多个 Quic 流,并同时发送消息 。
默认情况下,一个 Quic 连接的流的限制是 100,当然你可以设置 QuicConnectionOptions 的 MaxInboundBidirectionalStreams 和 MaxInboundUnidirectionalStreams 参数 。
for (int j = 0; j < 5; j++){_ = Task.Run(async () => {// 创建一个出站的双向流var stream = await connection.OpenOutboundStreamAsync(QuicStreamType.Bidirectional);var writer = PipeWriter.Create(stream);Console.WriteLine();await Task.Delay(2000);var message = $"Hello Quic [{stream.Id}] \n";Console.Write("Send -> " + message);await writer.WriteAsync(Encoding.UTF8.GetBytes(message));await writer.CompleteAsync();});}最终程序的输出如下
基于 .NET 7 的 QUIC 实现 Echo 服务

文章插图
完整的代码可以在下面的 github 地址找到,希望对您有用!
https://github.com/SpringLeee/PlayQuic
扫码关注【半栈程序员】,获取最新文章 。
基于 .NET 7 的 QUIC 实现 Echo 服务

文章插图

经验总结扩展阅读