'IOKING' TCP Transmission Server Engine ('云猴'©TCP通讯server引擎)(预告版)
关键词:
IOKING IOCP TCP Transmission Server Engine Lock Free Interlocked
云猴完毕portTCP通讯server引擎 无锁 原子锁(函数)
'IOKING' TCP Transmission Server Engine ('云猴'©TCP通讯server引擎)(预告版)
下载连接:
http://download.csdn.net/detail/guestcode/7474171
补充:
无锁消息引擎已经完毕:
http://blog.csdn.net/guestcode/article/details/44964951
一、 技术要点
I O C P:基于Windows的IOCP模型
句柄重用:避免反复创建socket句柄
内 存 池:专有的IO内存管理
无 锁:消息队列、连接池和内存池的多线程竞争不只实现了0内核态,还是连原子函数均未使用的真正得的“无锁”
限 速:限制client发送最大流量(避免恶意流量攻击)。限制client接收最小流量(client接收数据连续低于此速率3秒钟,将会被断开,避免恶意连接)
X86&X64:全然兼容两个系统平台
IPv4&IPv6:全然兼容两种IP格式
日 志:具有更完好的日志信息,便于server的故障分析,每秒採用数据存于Logs文件夹
引 擎:内置了生产消费者线程(包括能用于数据库操作和磁盘操作的线程)和生产消费队列,设置队列的生产消费关系能够架构复杂的应用server框架,不须要考虑线程的创建和队列的同步问题,仅需定义消息格式然后在对应的消费者线程里处理该消息就可以。
二、 执行界面
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3Vlc3Rjb2Rl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">
1、 点击Start
2、 设置监听IP和port点击Listen
三、 主要配置參数
iBuf:输入(接收)缓冲
oBuf:输出(发送)缓冲
IsIPv6:Socket句柄初始化默认是否是IPv6,假设监听地址是IPv6,最好打钩,能够避免句柄重用时的初始化
Max Input:最大输入速率(KB/S),限制发送client速率,避免恶意攻击,0为不限制
Min Output:最小输出速率(KB/S),client接收数据连续低于此速率3秒钟,将会被断开。避免恶意连接,0为不限制
四、 測试表现
用例1:
client:GSocketclient,1000个连接。回射模式:client收到上一个回射数据包后再发送下一个数据包
GSocket Server:CPU平均占用25%
IOKING Server:CPU平均占用22%+
数据包的往返时间一致
用例2:
client:GSocketclient。1000个连接,密集数据模式:client投递完一个数据包后马上再投递下一个数据包
GSocket Server:CPU平均占用26%+
IOKING Server:CPU平均占用15%-
GSocket Server:数据包往返时间超过2秒
IOKING Server:数据包往返小于600毫秒
结果:用例1情况下,基本没有多大区别。但在用例3情况下,数据越密集,与GSOCKET相比,IOKING具有更佳的表现。
达到了设计预期。
五、 开发过程
IOKING是GSOCKET1.0公布以后就開始着手做的。原来仅仅是考虑通讯引擎功能,前后历经了5年,为最求真正的“无锁”非常多技术问题须要慢慢的測试和求证。前后经过无数次的推到重建。期间研究了非常多锁和队列。经过充分分析IO事件的紧要等级和合理调配线程的角色,才得以“无锁”的实现(所谓无锁是指程序猿能控制的线程竞争区域实现的无锁操作,包含不使用原子函数(指令)在内实现的同步机制)。
在开发后期,增加了生产消费者线程和生产消费队列。这是个人每次做server程序都非常讨厌的反复创建server程序框架代码,有了这个功能即降低了反复工作也避免了新代码的Bug,还降低了server程序架构的所需的技术水平要求。
因此整个组件命名为:TCP通讯server引擎。由网络IO引擎和消息引擎(生产消费)这两大核心模块组成。
原定中文名为:泛虎(IO为泛,king为虎),经过多番思量才在2010年终于定为:云猴(IO为云,King为猴)。不想它能有多大作为。仅为体现一个程序猿认真的做事态度和完美的执着最求。
六、 公布说明
1、 消息引擎尚未全然測试,临时公布EchoServer
2、 測试可能由于个人硬件配置和软件配置等因素影响
3、 尚未做好保护措施。Demo暂不包括组件LIB文件。
4、 附带的exe具有全然功能可做压力測试用以參考。
使用前请对exe进行安全监測。本人无法确定自己的机器是否具有“危急”亦无法确定exe是否已经感染了“危急”,对此本人不担负不论什么责任。
5、 待全部功能都測试完成后再连一些測试数据和截图一起公布,因此此次公布定为预告版。
'IOKING' TCP Transmission Server Engine ('云猴'©TCP通讯server引擎)(预告版)的更多相关文章
- Method of offloading iSCSI TCP/IP processing from a host processing unit, and related iSCSI TCP/IP offload engine
A method of offloading, from a host data processing unit (205), iSCSI TCP/IP processing of data stre ...
- ISE(Iris Server Engine)是一个基于现代C++的跨平台(Linux和Windows)框架
ISE(Iris Server Engine)是一个基于现代C++的跨平台(Linux和Windows)的高性能多线程并发网络服务器程序框架.它封装了琐碎的socket以及各种操作系统APIs,以面向 ...
- SQL 2008 SP2 找不到SQL Server Engine
原文:SQL 2008 SP2 找不到SQL Server Engine 最近我有个客户碰到一个很奇怪的问题.他安装SQL server 2008 SP2的时候, SP2的安装程序无法找到SQL se ...
- 关于TOE(TCP/IP Offload Engine)
前言 昨天在电脑上抓取的报文,想进行回话,但是发现全部被设备丢弃了,没有debug信息,查看了抓包文件,原来是IP头和TCP.UDP头的检验和全部为0,也就是TOE(TCP/IP Offload En ...
- 在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连
在建立与服务器的连接时出错.在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连 sql server服务器sqlserver远程连接数据库防火墙在建立 ...
- TCP头部格式详解,附Wireshark对TCP头部抓包分析
TCP之所以能为数据通讯提供可靠的传输,主要在于TCP数据包头部功能非常多. 那么,我们先来看看TCP头部格式(RFC 793.1323定义了TCP头部): TCP头部格式中的内容解析如下:(文末还有 ...
- TCP/IP协议:OSI七层模型、TCP/IP四层模型的对比
1. OSI七层和TCP/IP四层的关系 1.1 OSI引入了服务.接口.协议.分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型. 1.2 OSI先有模型,后有协议,先有标准,后进行 ...
- TCP工作过程;TCP Flood的攻击的原理和现象;TCP协议设计的安全隐患与防范对策
TCP分三个阶段 连接建立(三次握手) 数据传输 连接释放(四次挥手) TCP工作过程 TCP连接建立阶段 第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给S ...
- TCP系列32—窗口管理&流控—6、TCP zero windows和persist timer
一.简介 我们之前介绍过,TCP报文中的window size表示发出这个报文的一端准备多少bytes的数据,当TCP的一端一直接收数据,但是应用层没有及时读取的话,数据一直在TCP模块中缓存,最终受 ...
随机推荐
- 【Python-2.7】大小写转换函数
字母大小写是编程过程中经常遇到的问题,如下函数可以灵活的进行大小写转换: title():把单词首字母转换为大写: upper():把每个字母转换为大写: lower():把每个字母转换为小写. 示例 ...
- MFC_2.6 使用菜单列表和控件
使用菜单列表和控件 1.添加List Control控件 2.属性设置VIEW 为REPORT 3.初始化 // 1. 设置列表的扩展风格 m_ListCtrl.SetExtendedStyle(LV ...
- c++写入txt
用ofstream 输出流,#include <fstream> ofstream outf; outf.open("abc.txt");outf<<123 ...
- 梦想CAD控件COM接口光栅图处理
在CAD操作过程中,我们在设计绘图时,光栅图像也就是我们常说的图片,应用非常广泛,在CAD中可以直接插入光栅图像,并且可以对光栅图像进行裁剪.透明度调整等一些操作,在网页可以快速实现我们所需功能. 一 ...
- Redis系列(九)--几道面试题
这里只是一点面试题,想了解更多,可以查看本人的Redis系列:https://www.cnblogs.com/huigelaile/category/1461895.html 1.Redis和Memc ...
- mysql导出数据到excel的两种方式
使用第一种方式如果数据中有换行符的话会自动换行,但使用第二种方式就不会出现这种效果了.两种方式自己选择哈 1:select * from into outfile 'c:/Users/a.xls' t ...
- 我的第一次"闭包"应用
结论: 闭包可以当作强类型语言如C++.Java的全局变量使用,非常巧妙 需求: ssm项目,使用pagehelper分页,在写前一页.后一页.第一页.最后一页等页面跳转时,遇到了问题,如果查询全部的 ...
- (C/C++学习)23.C++中指针的长度
引言:先看下面一个程序会打印出什么? #include<iostream> using namespace std; int main() { int a = 2; int *p = &a ...
- 将登录代码模块化,然后用add address接口来调用它,success!
登录模块,单独写成mylogin()方法,保存为modeltry119.py,然后接口的文件只写接口, 在post请求时,引用mylogin()返回的cookies就好了. requests.post ...
- python3中post请求里带list报错
这个post请求的数据太长,一般data=,json=就够了. 但是今天这个一直报错,用json吧,报缺少参数,用data吧,报多余[. 后来改成data=,并把数据中的[] 用引号括起来," ...