BeetleX

beetleX是基于dotnet core实现的轻量级高性能的TCP通讯组件,使用方便、性能高效和安全可靠是组件设计的出发点!开发人员可以在Beetlx组件的支持下快带地构建高性能的TCP通讯服务程序,在安全通讯方面只需要简单地设置一下SSL信息即可实现可靠安全的SSL服务。

项目地址:https://github.com/IKende/BeetleX  国内地址:https://gitee.com/ikende/BeetleX

使用方便性

beetleX网络流读写是基于Stream标准来构建,仅仅基于Stream的基础读写对于应用者来说还是过于繁琐;组件为了更方便进行网络数据处理在Stream的基础之上扩展了一系列的读写规则:ReadLine、ReadInt、WriteLine、WriteInt等一系列简便方法,在这些方法的支持下使用者就可以更轻松地处理数据;为了在网络通讯中更好的兼容其他平台协议以上方法都兼容Big-Endian和Little-Endian不同方式。为了更好地利用现有序列化组件,组件通过IPacket接口规范消息扩展,通过实现不同的Packet解释器,即可以实现基于Protobuf,json和Msgpack等方式的对象数据传输。

高性能特性

beetleX的高性能是建立在内部一个数据流处理对象PipeStream,它是构建在Stream标准之上;它和.NET内置的NetworkStream最大的差别是PipeStream的读写基于SocketAsyncEventArgs实现,这正是在编写高性能网络数据处理所提倡的模式。PipeStream不仅在网络数据处理模式上有着性能的优势,在内存读写上和MemoryStream也有着很大的区别;由于PipeStream的内存块是以一个基于链表的SocketAsyncEventArgs Buffer 组成,因此PipeStream在写入大数据的情况并不存在内存扩容和复制的问题;基于SocketAsyncEventArgs Buffer作为基础内存块还有一个好处是在协议数据和网络缓存读写并不存在内存块复制。如果在应用中中使用PipeStream相应的BinaryReader和IBinaryWriter读写规范,那大部分数据处理基本不存在内存复制过程,从而让数据处理性能更高效。

以下是PipeStream的结构: 

性能

beetleX的性能到底怎样呢,以下简单和DotNetty进行一个网络数据交换的性能测试,分别是1K,5K和10K连接数下数据请求并发测试

DotNetty测试代码

   public override void ChannelRead(IChannelHandlerContext context, object message){var buffer = message as IByteBuffer;context.WriteAsync(message);}

Beetlex 测试代码

        public override void SessionReceive(IServer server, SessionReceiveEventArgs e){server.Send(e.Stream.ToPipeStream().GetReadBuffers(), e.Session);base.SessionReceive(server, e);}

测试结果

1K connections

5K connections

10K connections

构建TCP Server

    class Program : ServerHandlerBase{private static IServer server;public static void Main(string[] args){NetConfig config = new NetConfig();//ssl//config.SSL = true;//config.CertificateFile = @"c:\ssltest.pfx";//config.CertificatePassword = "123456";server = SocketFactory.CreateTcpServer<Program>(config);server.Open();Console.Write(server);Console.Read();}public override void SessionReceive(IServer server, SessionReceiveEventArgs e){string name = e.Stream.ToPipeStream().ReadLine();Console.WriteLine(name);e.Session.Stream.ToPipeStream().WriteLine("hello " + name);e.Session.Stream.Flush();base.SessionReceive(server, e);}}

构建TCP Client

    class Program{static void Main(string[] args){TcpClient client = SocketFactory.CreateClient<TcpClient>("127.0.0.1", 9090);//ssl//TcpClient client = SocketFactory.CreateSslClient<TcpClient>("127.0.0.1", 9090, "localhost");while (true){Console.Write("Enter Name:");var line = Console.ReadLine();client.Stream.ToPipeStream().WriteLine(line);client.Stream.Flush();var reader = client.Read();line = reader.ToPipeStream().ReadLine();Console.WriteLine(line);}Console.WriteLine("Hello World!");}}

异步Client

    class Program{static void Main(string[] args){AsyncTcpClient client = SocketFactory.CreateClient<AsyncTcpClient>("127.0.0.1", 9090);//SSL//AsyncTcpClient client = SocketFactory.CreateSslClient<AsyncTcpClient>("127.0.0.1", 9090, "serviceName");client.ClientError = (o, e) =>{Console.WriteLine("client error {0}@{1}", e.Message, e.Error);};client.Receive = (o, e) =>{Console.WriteLine(e.Stream.ToPipeStream().ReadLine());};var pipestream = client.Stream.ToPipeStream();pipestream.WriteLine("hello henry");client.Stream.Flush();Console.Read();}}

实现一个Protobuf对象解释器

    public class Packet : FixedHeaderPacket{public Packet(){TypeHeader = new TypeHandler();}private PacketDecodeCompletedEventArgs mCompletedEventArgs = new PacketDecodeCompletedEventArgs();public void Register(params Assembly[] assemblies){TypeHeader.Register(assemblies);}public IMessageTypeHeader TypeHeader { get; set; }public override IPacket Clone(){Packet result = new Packet();result.TypeHeader = TypeHeader;return result;}protected override object OnReader(ISession session, PipeStream reader){Type type = TypeHeader.ReadType(reader);int bodySize = reader.ReadInt32();return reader.Stream.Deserialize(bodySize, type);}protected override void OnWrite(ISession session, object data, PipeStream writer){TypeHeader.WriteType(data, writer);MemoryBlockCollection bodysize = writer.Allocate(4);int bodyStartlegnth = (int)writer.CacheLength;ProtoBuf.Meta.RuntimeTypeModel.Default.Serialize(writer.Stream, data);bodysize.Full((int)writer.CacheLength - bodyStartlegnth);}}

BeetleX的介绍暂时到这里,如果需要了解项目的情况可以到Github下载相关代码和Samples,如果有疑问可以在Gibhub上提相关issue。

.net core高性能通讯开源组件BeetleX相关推荐

  1. 微信团队分享:iOS版微信的高性能通用key-value组件技术实践

    本文来自微信开发团队guoling的技术分享. 1.前言 本文要分享的是iOS版微信内部正在推广和使用的一个高性能通用key-value 组件的技术实践过程,该组件在微信内部被命名为MMKV(以下简称 ...

  2. Android 开源组件和第三方库汇总

    出自(https://github.com/Tim9Liu9/TimLiu-Android) TimLiu-Android 自己总结的Android开源项目及库. 1. github排名 https: ...

  3. 这些 .Net and Core 相关的开源项目,你都知道吗?(持续更新中...)

    最近更新时间2017-12-28 序列化 Json.NET http://json.codeplex.com/ Json.Net是一个读写Json效率比较高的.Net框架.Json.Net 使得在.N ...

  4. ASP.NET Core MVC – Tag Helper 组件

    ASP.NET Core Tag Helpers系列目录,这是第五篇,共五篇: ASP.NET Core MVC – Tag Helpers 介绍 ASP.NET Core MVC – Caching ...

  5. antd table设置表格一个单元格的字体颜色_alireacttable:高性能 React 表格组件

    点击上方蓝字关注我们 简介 在前端开发中,表格一直都是最复杂的组件之一.表格不仅要支持丰富的操作(排序.过滤.搜索.分页.自定义列等),还要有非常好的性能以展示大量数据.很多组件库(例如 fusion ...

  6. SpringCloud微服务:阿里开源组件Nacos,服务和配置管理

    源码地址:GitHub·点这里||GitEE·点这里 一.阿里微服务简介 1.基础描述 Alibaba-Cloud致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用微服务的必需组件,方便开 ...

  7. 开源组件 Ehcache中被曝严重漏洞,影响多款Jira产品

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士 Atlassian 公司督促企业客户修复其 Jira Data Center 和 Jira Service Management Data ...

  8. 组件cdn引入_高性能 React UI组件库SHINEOUT

    今天给大家推荐一款超不错的React.js桌面端UI组件库Shineout. shineout 基于react.js构建的轻量级UI组件库.包含表单元素.数据表.通知提示.布局选项.导航等多种组件. ...

  9. 新数仓系列:开源组件运营(3)

    大数据前几年各种概念争论很多,NoSQL/NewSQL,CAP/BASE概念一堆堆的,现在这股热潮被AI接过去了.大数据真正落地到车联网,分控,各种数据分析等等具体场景. 概念很高大上,搞得久了就会发 ...

最新文章

  1. nginx 禁止IP访问服务器和非法域名绑定你的IP
  2. bose蓝牙音箱使用说明_身轻如燕好带走 时尚便携蓝牙音箱TOP5推荐
  3. 使用Vitamio打造自己的Android万能播放器(1)——准备
  4. counter 计数器
  5. Z-Stack Home Developer's Guide—8. Additional Information for HA Applications中文翻译
  6. linux tee 日志输出_25 个 Linux 下最炫酷又强大的命令行神器,你用过其中哪几个呢?...
  7. 论文阅读:BASNet:Boundary-Aware Salient Object Detection
  8. Github 用户喊话微软:放弃 ICE 吧,不然会失去我们的
  9. 企业邮件系统搭建-关于不能往yahoo,sina,hotmail地址发邮件的问题一
  10. jQuery UI 实现 仿购物车功能 简洁的js
  11. maven 内存不足_如何修复Maven内存不足问题
  12. JAVA面向对象编程四大特点简述
  13. html5移动端webscoket实现在线聊天
  14. 自考计算机毕业论文范文,计算机信息论文范文 计算机信息类有关自考毕业论文范文5000字...
  15. excel双纵坐标轴展示的方法
  16. matlab 傅里叶变换 频谱图,傅里叶变换与信号频谱图.PDF
  17. 在 LaTeX 中插入图片
  18. pointnet-补充材料阅读
  19. ArduPilot添加新的惯导方案
  20. python1到100奇数相加_如何使用while语句求1到100的奇数和

热门文章

  1. Java Web 之Token+Cookie+Session
  2. Jackson学习笔记
  3. UITextField实时监听输入文本的变化
  4. Circle-Progress-View
  5. Android学习摘要一之Android历史
  6. 一个html5流星雨源码
  7. 全国计算机等级考试题库二级C操作题100套(第92套)
  8. 全国计算机等级考试题库二级C操作题100套(第84套)
  9. zabbix查看mysql同步_Zabbix 检测Mysql数据库的主从同步
  10. 关于SimpleDateFormat时间转换总是显示1970年的问题