当前位置: 首页 > news >正文

涟源网站建设杭州大江东建设局网站

涟源网站建设,杭州大江东建设局网站,网站怎样制作 优帮云,网络平台代理写在前面 在进一步了解Socket粘包分包的过程中,了解到了.NET 中的 System.IO.Pipelines,可以更优雅高效的解决这个问题;先跟随官方的示例做个初步的认识。 System.IO.Pipelines 是一个库,旨在使在 .NET 中执行高性能 I/O 更加容…

写在前面

在进一步了解Socket粘包分包的过程中,了解到了.NET 中的 System.IO.Pipelines,可以更优雅高效的解决这个问题;先跟随官方的示例做个初步的认识。

System.IO.Pipelines 是一个库,旨在使在 .NET 中执行高性能 I/O 更加容易。 该库的目标为适用于所有 .NET 实现的 .NET Standard。
System.IO.Pipelines 具有高性能的流数据分析功能,可以减少代码复杂性。

老规矩通过NuGet安装该类库

代码实现

using System.Buffers;
using System.IO.Pipelines;
using System.Text;class Program
{static async Task Main(){using var stream = File.OpenRead("lorem-ipsum.txt");var reader = PipeReader.Create(stream);var writer = PipeWriter.Create(Console.OpenStandardOutput(),new StreamPipeWriterOptions(leaveOpen: true));WriteUserCancellationPrompt();var processMessagesTask = ProcessMessagesAsync(reader, writer);var userCanceled = false;var cancelProcessingTask = Task.Run(() =>{while (char.ToUpperInvariant(Console.ReadKey().KeyChar) != 'C'){WriteUserCancellationPrompt();}userCanceled = true;// No exceptions thrownreader.CancelPendingRead();writer.CancelPendingFlush();});await Task.WhenAny(cancelProcessingTask, processMessagesTask);Console.WriteLine($"\n\nProcessing {(userCanceled ? "cancelled" : "completed")}.\n");}static void WriteUserCancellationPrompt() =>Console.WriteLine("Press 'C' to cancel processing...\n");static async Task ProcessMessagesAsync(PipeReader reader,PipeWriter writer){try{while (true){ReadResult readResult = await reader.ReadAsync();ReadOnlySequence<byte> buffer = readResult.Buffer;try{if (readResult.IsCanceled){break;}if (TryParseLines(ref buffer, out string message)){FlushResult flushResult =await WriteMessagesAsync(writer, message);if (flushResult.IsCanceled || flushResult.IsCompleted){break;}}if (readResult.IsCompleted){if (!buffer.IsEmpty){throw new InvalidDataException("Incomplete message.");}break;}}finally{reader.AdvanceTo(buffer.Start, buffer.End);}}}catch (Exception ex){Console.Error.WriteLine(ex);}finally{await reader.CompleteAsync();await writer.CompleteAsync();}}static bool TryParseLines(ref ReadOnlySequence<byte> buffer,out string message){SequencePosition? position;StringBuilder outputMessage = new();while (true){position = buffer.PositionOf((byte)'\n');if (!position.HasValue)break;outputMessage.Append(Encoding.ASCII.GetString(buffer.Slice(buffer.Start, position.Value))).AppendLine();buffer = buffer.Slice(buffer.GetPosition(1, position.Value));};message = outputMessage.ToString();return message.Length != 0;}static ValueTask<FlushResult> WriteMessagesAsync(PipeWriter writer,string message) =>writer.WriteAsync(Encoding.ASCII.GetBytes(message));
}

调用示例

总结

例子中用到的文本文件是一个以\n 换行符作为结尾的多行文本,微软官方示例没有提供,这个是自己建的测试文件,如果没有检测到\n会抛出异常。

 从运行的结果可以看到,从传入的流中识别以\n结尾,作为数据块的区分,利用这个特性定义数据报文的尾部,实现分包。

http://www.yayakq.cn/news/413276/

相关文章:

  • 做外贸应该去什么网站wordpress站点更换域名
  • 保山市建设厅官方网站wordpress 查看密码
  • 做导航网站怎么盈利北京网站建设公司文字排版
  • 做视频解析网站播放器和接口甘德网站建设
  • 谷歌云做网站a站免费最好看的电影片推荐
  • 山东和城乡建设厅网站王也踏青图是什么梗
  • 优化企业网站套版网站怎么做
  • 网站开发技术项目宁波做网站哪家好
  • 晋中网站建设价格门户网站建设流程
  • 帝国cms网站名称万网网站备案授权书
  • 服务器做视频网站吗如何建设网站视频教程
  • 上饶做网站公司青之峰网站建设哪家好
  • 设计素材网站导航大全哈尔滨优化网站排名
  • 网站推广及seo方案网站服务器证书过期怎么解决
  • 网站开发需要懂哪些公司里面有人员增减要去哪个网站做登记
  • 聊城做wap网站价格做网站数据库表设计
  • 网站架构设计师有哪些学校可以报考网站建设及验收标准
  • 在哪建网站wordpress 置顶插件
  • 做网站优化排名企业腾讯邮箱入口
  • 低代码网站开发平台包装设计的目的和意义
  • asp.netmvc网站开发网站建设 公司
  • ps做网站效果深圳装修公司报价
  • 做网站服务销售名师工作室网站建设 意义
  • 网站底部 设计百度怎么优化网站关键词
  • 网站没有根目录查域名注册人
  • 网站建设公司哪家好 该如何选择手机图片编辑器
  • 网页与网站设计什么是抖动seo人员的相关薪资
  • 网站布局设计自适应全国网站设计排名
  • 天台城乡规划建设局网站wordpress能商用吗?
  • 荆门市住房和城乡建设局网站微盟小程序模板