可靠、高性能的Socket TCP通讯组件

转 http://www.ikende.com/beetle.aspx

        Beetle是基于c#编写的高性能稳定的Socket   tcp组件,它轻易支持成千上万长连接基础上进行密集的通讯交互. 组件除了在性能上非常出色外,其稳定性也足以保证应用7x24无间断运行。

        为了更好地利用Socket IO来处理数据,组件提供智能合并消息机制,自动根据当前负载情况进行数据合并处理减少IO的操作数量;结合2.4.2提供的可复用消息对象,组件可以轻易应付500或更多的同场景物体状态信息广播,其信息转发广播量可达到每秒上百万的同时还能保证良好的延时
         组件支持flash AMF3,protobuf,Silverlight ,windows phone。实际情况中beetle可以简单地扩展不同的协议包如:http,websocket等

  • 上十亿次请求的压力和稳定性测试
  • 上千万次连接接入断开稳定性测试
  • 流程处理结构图
  • 多节点负载连接池结构
  • 2.6在win2008下的吞吐性能测试报告
  • 高密集信息广播转发强度测试
  • 2.7海量数据广播测试

2.7

  • 添加设置数据发送是否使用线程队列,默认是
  • 同步节点池添加组功能,并提供节点连接获取功能,节点分组功能
  • 调整LRU死连接检测实现
  • 调整同步连接池负载和故障处理机制
  • 调整线程队列控制,更高效地处理少量连接基于请求应答快速响应的应用.
  • 移除对Smark.Core的依赖
  • 移除ChannelController功能
  • 调整TcpServer的在线用户存储结构方式
  • 重构SizePackage(基于头4节字包协议),EofPackage(基于结束符协议)的处理,DataBuffer和BufferPool
  • 移除BufferWriter和BufferReader
  • 添加BufferStream对象,IDataReader和IDataWriter接口和相关实现
  • 调整使用的基础数据结构 .NET2.0 Generic .NET 4.0 Concurrent;
  • 兼容Big-Endian和Little-Endian
  • 支持用户自定义流写入,可以灵活对消息处理加入加密和压缩等模块

2.6.X

  1. 添加多节点同步和异步连接池,用于服务器之间进行通讯,并通过连接池实现负载和热备等功能。
  2. 修改复MessageAdapter处理null消息的错误,此bug存在于2.5x
  3. 给连接池添加轮循获取节点或根据节点名称获取节点方法,主要用于根据实际情况来获取节点发送数据.
  4. 修改配置节描述类名称,添加连接池配置类(2.5对应的samples要修改config配置才能使用).
  5. 编译.net 4.0的时候没有设置相关预编译符导致功能异常(相关.net 4.0不能用,不影响.net 2.0版本).
  6. 把原来TcpServer错误写入队列改成事件方式通知.
  7. 修复在web下无法加载受权文件信息.
  8. 修复ChannelController处理消息线程安全问题(2.6.4)
  9. 添加KillDC类,用于处理一段时间没请求的连接(2.6.4)

2.5.x   

  1. 修改调度器用于处理延时控制,划分为socket处理队列和消息处理队列,可以根据当前服务器的核数进行一个灵活分配设置。
  2. 添加Server基础类用于更方便地构建服务。
  3. 添加TcpSyncChannel对象,用于提供同步操作适用于高并发服务调用,如用于WEB服务的调用逻辑服务器功能。
  4. 添加Cache功能,用于方便基于消息对象的返回值进行一个缓存管理。
  5. 允许TcpUtils.Setup通过指定名称的配置信息进行组件初始化。
  6. 给通道添加接收数据队列积压的伐值,设置后当前通道的数据队列积压到伐值的时候强行关闭通道。
  7. 修改TcpChannel,使Send和receive灵活地兼容不同协议的MessageAdapter。
  8. 由于兼容MessageAdapter导致在某些情况下消息没被推送到发送队列中[2.5.9.3](2.4.x版本不存在此问题)

2.4.x   

  1. 优化BufferWriter数据写入过程,使对象写入流的效率提高30%;优化后除了数据成员分布在两个buffer中才会存在buffer.copy操作。
  2. 提供Uint16,uint32,uint64等方法。
  3. 提供WriteString方法,用于写一个不带头长度描述的string值。
  4. 提供WriteShortString方法,用于写入一个带UInt16长度标识的string值。
  5. 修复由优化Buffer读取时导致Varint数值解码错误,此问题只会影响启用了Varint编码。
  6. 提供计数消息对象,用于处理转发消息导致的重复写入流的工作,避免海量数据转发引起的消息写入流产生的损耗。
  7. 给TcpChannel的Send提供返回值用于描述当前发送的消息是否正常写入到队列中。公开IsDisposed用于判断当前TcpChannel的状态是否已经释放。
  8. 添加ObjectFormatter对象,可以把消息序列化到ByteArraySegment或从ByteArraySegment数据中反序列化对象。
  9. 给ByteArraySegment添加DES加解密方法。

2.3.x   

  1. 修改Package数据让其支持自定义消息类型标识,不再以类型名称的固定方式作为消息类型标记。
  2. 添加Package一些事件信息参数,方便实现消息可复用机制,从而达到在高并发下不停创建结构比较大的消息所带来的内存开销。
  3. 更低的内存使用率,初始化可供1W连接请求并发组件开启占用内存只需要60MB。
  4. 添加发送完成事件开启属性,默认不开启消息发送完成通知。
  5. 添加支持可变长度写入int32,int64,float,double ,从而使大多数传输数值型数据使用更低的带宽。
  6. 修复设置可变长度写入 int32,int64,float,double 时导致读取消息头4字节长度错误。

2.2.x   

  1. 添加延时释放资源,用于解决当资源释放时接收队列中等待的消息掉弃没被处理。
  2. 公开TickCount属性,此属性是记录最近通道接收消息或发送的时间。
  3. 给Channel释放事件提供还在队列中没被发送出去的消息信息。
  4. 添加Task对象用于统一执行一些任务,如Channel释放检测,连接有效性检测等。
  5. 给ByteArraySegment添加一些字符编码方法和数据导入方法。
  6. 给Channel添加接收数据和发送数据计数。
  7. 给连接创建Channel前提供事件,通过此事件可以取消Channel的创建
  8. 修改BufferWriter创建后分配Buffer问题,通过构建参数来确定是否分配一个Buffer,修改BufferReader在消息读取完成后马上释放占用的buffer不等到下次数据导入。
  9. 修改发送消息完成事件信息,提供这次发送的信息成功或失败。
  10. 修改Buffer处理机制,在大量连接的时候有着更好的Buffer利用率(特别是几万同时在线的时候)。
  11. 给TcpServer添加暂停和恢复接入连接功能。

2.1.3 

  1. 添加消息发送完成事件。
  2. 添加可使用异步方式创建Client连接。
  3. 修复读取ByteArraySegment时SetCount的错误。
  4. 修正Buffer.ReadList获取为空的问题。
  5. 给Writer和Reader添加ByteArraySegment方法, 主要用于代替大的byte[]和string读取和写入用. 避免存在大量这些数据操作的时候会有大量的byte[]创建和销毁。
  6. 消息处理队列对象由于没有设置Channel属性,导致错误不会触Channel.Error事件。
  7. 修正有些导致Channel释放的错误没有正常触发Error事件。

 

你可能感兴趣的:(socket,高性能,tcpip)