到这里,客户端和服务端的代码都完成了,客户端使用Quic 流发送了一些消息给服务端,服务端收到消息后在控制台输出,并回复一个 Ack 消息,因为我们创建了一个双向流 。
程序的运行结果如下
文章插图
我们上面说到了一个 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();});}
最终程序的输出如下文章插图
完整的代码可以在下面的 github 地址找到,希望对您有用!
https://github.com/SpringLeee/PlayQuic
扫码关注【半栈程序员】,获取最新文章 。
文章插图
经验总结扩展阅读
- 2023年农历七月廿九宜订婚吗 2023年9月13日是订婚的黄道吉日吗
- 2023年1月26日是装修的黄道吉日吗 2023年1月26日装修吉日一览表
- 2023年1月26日进棺材好不好 2023年1月26日是进棺材的黄道吉日吗
- <一>类,对象,this指针
- 《ASP.NET Core技术内幕与项目实战》精简集-目录
- 211大学里最好的20所大学有哪些
- 2023年9月13日是举办婚礼的黄道吉日吗 2023年农历七月廿九举办婚礼吉日
- 2023年1月26日举办丧礼好吗 2023年1月26日是举办丧礼的黄道吉日吗
- 2022年12月5日装门好不好
- 2023年9月13日祭祀吉日一览表 2023年9月13日是祭祀的黄道吉日吗