前言
.NET9 RC1如期发布了,这个版本的运行时基本上定型了。需要微调的是托管方向的一些细节问题,比如SDK API最后的增加。
代码:
//实例化一个websocket
using var cws = new ClientWebSocket();
// 设置每隔 5 秒发送一个 Ping 请求
cws.Options.KeepAliveInterval = TimeSpan.FromSeconds(5);
// 如果 1 秒内请求的服务端没有响应,则终止连接
cws.Options.KeepAliveTimeout = TimeSpan.FromSeconds(1);
Uri serverUri = new Uri("https://www.baidu.com");
var cancellationToken = new CancellationToken();
// 连接 WebSocket 服务器
await cws.ConnectAsync(serverUri, cancellationToken);
以上就是WebSocket的操作例子,KeepAliveInterval 属性用于设置每隔5秒钟从客户端往服务器发送一个ping请求。KeepAliveTimeout 属性则是检查这个客户端发送的ping请求服务端是否在一定的时间内有响应,这里的时间设置的是1秒。
本例即是客户端每隔5秒钟往服务器端发送一个ping请求,如果ping请求在1秒钟内没有响应的话,就终止这个链接。
ZLib 和 Brotli,分别添加了用于特定算法的压缩级别和压缩策略的设置。
CompressionLevel设置压缩级别,CompressionStrategy: 设置压缩策略
Zlib代码:
private MemoryStream CompressStream(Stream uncompressedStream)
{
var compressorOutput = new MemoryStream();
using var compressionStream = new ZLibStream(compressorOutput, new ZLibCompressionOptions() { CompressionLevel = 6, CompressionStrategy = ZLibCompressionStrategy.HuffmanOnly });
uncompressedStream.CopyTo(compressionStream);
compressionStream.Flush();
return compressorOutput;
}
private MemoryStream CompressStream(Stream uncompressedStream)
{
var compressorOutput = new MemoryStream();
using var compressionStream = new ZLibStream(compressorOutput, new BrotliCompressionOptions() { CompressionLevel = 6, CompressionStrategy = BrotliCompressionOptions.HuffmanOnly });
uncompressedStream.CopyTo(compressionStream);
compressionStream.Flush();
return compressorOutput;
}
WebSocket的新增功能和压缩对于级别和策略的控制,这样做的目的:节省内存,简约代码,提高程序效率。.NET9的性能继续持续性上升。