关键词:
IOKING IOCP TCP Transmission Server Engine Lock Free Interlocked
云猴完成端口TCP通讯服务器引擎 无锁 原子锁(函数)
‘IOKING‘ TCP Transmission Server Engine (‘云猴‘?TCP通讯服务器引擎)(预告版)
下载连接:
http://download.csdn.net/detail/guestcode/7474171
一、 技术要点
I O C P:基于Windows的IOCP模型
句柄重用:避免重复创建socket句柄
内 存 池:专有的IO内存管理
无 锁:消息队列、连接池和内存池的多线程竞争不仅仅实现了0内核态,还是连原子函数均未使用的真正得的“无锁”
限 速:限制客户端发送最大流量(避免恶意流量攻击),限制客户端接收最小流量(客户端接收数据连续低于此速率3秒钟,将会被断开,避免恶意连接)
X86&X64:完全兼容两个系统平台
IPv4&IPv6:完全兼容两种IP格式
日 志:具有更完善的日志信息,便于服务器的故障分析,每秒采用数据存于Logs目录
引 擎:内置了生产消费者线程(包含能用于数据库操作和磁盘操作的线程)和生产消费队列,设置队列的生产消费关系可以架构复杂的应用服务器框架,不需要考虑线程的创建和队列的同步问题,仅需定义消息格式然后在相应的消费者线程里处理该消息即可。
二、 运行界面
1、 点击Start
2、 设置监听IP和端口点击Listen
三、 主要配置参数
iBuf:输入(接收)缓冲
oBuf:输出(发送)缓冲
IsIPv6:Socket句柄初始化默认是否是IPv6,如果监听地址是IPv6,最好打钩,可以避免句柄重用时的初始化
Max Input:最大输入速率(KB/S),限制发送客户端速率,避免恶意攻击,0为不限制
Min Output:最小输出速率(KB/S),客户端接收数据连续低于此速率3秒钟,将会被断开,避免恶意连接,0为不限制
四、 测试表现
用例1:
客户端:GSocket客户端,1000个连接,回射模式:客户端收到上一个回射数据包后再发送下一个数据包
GSocket Server:CPU平均占用25%
IOKING Server:CPU平均占用22%+
数据包的往返时间一致
用例2:
客户端:GSocket客户端,1000个连接,密集数据模式:客户端投递完一个数据包后立即再投递下一个数据包
GSocket Server:CPU平均占用26%+
IOKING Server:CPU平均占用15%-
GSocket Server:数据包往返时间超过2秒
IOKING Server:数据包往返小于600毫秒
结果:用例1情况下,基本没有多大差别;但在用例3情况下,数据越密集,与GSOCKET相比,IOKING具有更佳的表现。达到了设计预期。
五、 开发过程
IOKING是GSOCKET1.0发布以后就开始着手做的,原来只是考虑通讯引擎功能,前后历经了5年,为最求真正的“无锁”很多技术问题需要慢慢的测试和求证,前后经过无数次的推到重建,期间研究了很多锁和队列,经过充分分析IO事件的紧要等级和合理调配线程的角色,才得以“无锁”的实现(所谓无锁是指程序员能控制的线程竞争区域实现的无锁操作,包括不使用原子函数(指令)在内实现的同步机制)。
在开发后期,加入了生产消费者线程和生产消费队列,这是个人每次做服务器程序都很讨厌的重复创建服务器程序框架代码,有了这个功能即减少了重复工作也避免了新代码的Bug,还降低了服务器程序架构的所需的技术水平要求。
因此整个组件命名为:TCP通讯服务器引擎。由网络IO引擎和消息引擎(生产消费)这两大核心模块组成。
原定中文名为:泛虎(IO为泛,king为虎),经过多番思量才在2010年最终定为:云猴(IO为云,King为猴)。不想它能有多大作为,仅为体现一个程序员认真的做事态度和完美的执着最求。
六、 发布说明
1、 消息引擎尚未完全测试,暂时发布EchoServer
2、 测试可能因为个人硬件配置和软件配置等因素影响
3、 尚未做好保护措施,Demo暂不包含组件LIB文件。
4、 附带的exe具有完全功能可做压力测试用以参考。使用前请对exe进行安全监测,本人无法确定自己的机器是否具有“危险”亦无法确定exe是否已经感染了“危险”,对此本人不担负任何责任。
5、 待所有功能都测试完毕后再连一些测试数据和截图一起发布,因此此次发布定为预告版。
'IOKING' TCP Transmission Server Engine ('云猴'©TCP通讯服务器引擎)(预告版)