转 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.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
- 添加多节点同步和异步连接池,用于服务器之间进行通讯,并通过连接池实现负载和热备等功能。
- 修改复MessageAdapter处理null消息的错误,此bug存在于2.5x
- 给连接池添加轮循获取节点或根据节点名称获取节点方法,主要用于根据实际情况来获取节点发送数据.
- 修改配置节描述类名称,添加连接池配置类(2.5对应的samples要修改config配置才能使用).
- 编译.net 4.0的时候没有设置相关预编译符导致功能异常(相关.net 4.0不能用,不影响.net 2.0版本).
- 把原来TcpServer错误写入队列改成事件方式通知.
- 修复在web下无法加载受权文件信息.
- 修复ChannelController处理消息线程安全问题(2.6.4)
- 添加KillDC类,用于处理一段时间没请求的连接(2.6.4)
2.5.x
- 修改调度器用于处理延时控制,划分为socket处理队列和消息处理队列,可以根据当前服务器的核数进行一个灵活分配设置。
- 添加Server基础类用于更方便地构建服务。
- 添加TcpSyncChannel对象,用于提供同步操作适用于高并发服务调用,如用于WEB服务的调用逻辑服务器功能。
- 添加Cache功能,用于方便基于消息对象的返回值进行一个缓存管理。
- 允许TcpUtils.Setup通过指定名称的配置信息进行组件初始化。
- 给通道添加接收数据队列积压的伐值,设置后当前通道的数据队列积压到伐值的时候强行关闭通道。
- 修改TcpChannel,使Send和receive灵活地兼容不同协议的MessageAdapter。
- 由于兼容MessageAdapter导致在某些情况下消息没被推送到发送队列中[2.5.9.3](2.4.x版本不存在此问题)
2.4.x
- 优化BufferWriter数据写入过程,使对象写入流的效率提高30%;优化后除了数据成员分布在两个buffer中才会存在buffer.copy操作。
- 提供Uint16,uint32,uint64等方法。
- 提供WriteString方法,用于写一个不带头长度描述的string值。
- 提供WriteShortString方法,用于写入一个带UInt16长度标识的string值。
- 修复由优化Buffer读取时导致Varint数值解码错误,此问题只会影响启用了Varint编码。
- 提供计数消息对象,用于处理转发消息导致的重复写入流的工作,避免海量数据转发引起的消息写入流产生的损耗。
- 给TcpChannel的Send提供返回值用于描述当前发送的消息是否正常写入到队列中。公开IsDisposed用于判断当前TcpChannel的状态是否已经释放。
- 添加ObjectFormatter对象,可以把消息序列化到ByteArraySegment或从ByteArraySegment数据中反序列化对象。
- 给ByteArraySegment添加DES加解密方法。
2.3.x
- 修改Package数据让其支持自定义消息类型标识,不再以类型名称的固定方式作为消息类型标记。
- 添加Package一些事件信息参数,方便实现消息可复用机制,从而达到在高并发下不停创建结构比较大的消息所带来的内存开销。
- 更低的内存使用率,初始化可供1W连接请求并发组件开启占用内存只需要60MB。
- 添加发送完成事件开启属性,默认不开启消息发送完成通知。
- 添加支持可变长度写入int32,int64,float,double ,从而使大多数传输数值型数据使用更低的带宽。
- 修复设置可变长度写入 int32,int64,float,double 时导致读取消息头4字节长度错误。
2.2.x
- 添加延时释放资源,用于解决当资源释放时接收队列中等待的消息掉弃没被处理。
- 公开TickCount属性,此属性是记录最近通道接收消息或发送的时间。
- 给Channel释放事件提供还在队列中没被发送出去的消息信息。
- 添加Task对象用于统一执行一些任务,如Channel释放检测,连接有效性检测等。
- 给ByteArraySegment添加一些字符编码方法和数据导入方法。
- 给Channel添加接收数据和发送数据计数。
- 给连接创建Channel前提供事件,通过此事件可以取消Channel的创建
- 修改BufferWriter创建后分配Buffer问题,通过构建参数来确定是否分配一个Buffer,修改BufferReader在消息读取完成后马上释放占用的buffer不等到下次数据导入。
- 修改发送消息完成事件信息,提供这次发送的信息成功或失败。
- 修改Buffer处理机制,在大量连接的时候有着更好的Buffer利用率(特别是几万同时在线的时候)。
- 给TcpServer添加暂停和恢复接入连接功能。
2.1.3
- 添加消息发送完成事件。
- 添加可使用异步方式创建Client连接。
- 修复读取ByteArraySegment时SetCount的错误。
- 修正Buffer.ReadList获取为空的问题。
- 给Writer和Reader添加ByteArraySegment方法, 主要用于代替大的byte[]和string读取和写入用. 避免存在大量这些数据操作的时候会有大量的byte[]创建和销毁。
- 消息处理队列对象由于没有设置Channel属性,导致错误不会触Channel.Error事件。
- 修正有些导致Channel释放的错误没有正常触发Error事件。