关键词:

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引擎)(预告版)的更多相关文章

  1. 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 ...

  2. ISE(Iris Server Engine)是一个基于现代C++的跨平台(Linux和Windows)框架

    ISE(Iris Server Engine)是一个基于现代C++的跨平台(Linux和Windows)的高性能多线程并发网络服务器程序框架.它封装了琐碎的socket以及各种操作系统APIs,以面向 ...

  3. SQL 2008 SP2 找不到SQL Server Engine

    原文:SQL 2008 SP2 找不到SQL Server Engine 最近我有个客户碰到一个很奇怪的问题.他安装SQL server 2008 SP2的时候, SP2的安装程序无法找到SQL se ...

  4. 关于TOE(TCP/IP Offload Engine)

    前言 昨天在电脑上抓取的报文,想进行回话,但是发现全部被设备丢弃了,没有debug信息,查看了抓包文件,原来是IP头和TCP.UDP头的检验和全部为0,也就是TOE(TCP/IP Offload En ...

  5. 在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连

    在建立与服务器的连接时出错.在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连 sql server服务器sqlserver远程连接数据库防火墙在建立 ...

  6. TCP头部格式详解,附Wireshark对TCP头部抓包分析

    TCP之所以能为数据通讯提供可靠的传输,主要在于TCP数据包头部功能非常多. 那么,我们先来看看TCP头部格式(RFC 793.1323定义了TCP头部): TCP头部格式中的内容解析如下:(文末还有 ...

  7. TCP/IP协议:OSI七层模型、TCP/IP四层模型的对比

    1. OSI七层和TCP/IP四层的关系 1.1 OSI引入了服务.接口.协议.分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型. 1.2 OSI先有模型,后有协议,先有标准,后进行 ...

  8. TCP工作过程;TCP Flood的攻击的原理和现象;TCP协议设计的安全隐患与防范对策

    TCP分三个阶段 连接建立(三次握手) 数据传输 连接释放(四次挥手) TCP工作过程 TCP连接建立阶段 第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给S ...

  9. TCP系列32—窗口管理&流控—6、TCP zero windows和persist timer

    一.简介 我们之前介绍过,TCP报文中的window size表示发出这个报文的一端准备多少bytes的数据,当TCP的一端一直接收数据,但是应用层没有及时读取的话,数据一直在TCP模块中缓存,最终受 ...

随机推荐

  1. 左耳听风 ARTS Week 001

    要求:1.每周至少做一个 leetcode 的算法题 2.阅读并点评至少一篇英文技术文章 3.学习至少一个技术技巧 4.分享一篇有观点和思考的技术文章 1.每周至少做一个 leetcode 的算法题 ...

  2. 后台接收不到postman发送的xml参数的解决办法

    首先在body下复制需要传的xml: 然后点击url右边的Params,添加key和value.value和body下的xml是一样的: 最后点击send,后台就能接收到参数了.

  3. 3星|《OKR:源于英特热和谷歌的目标管理利器》:OKR原理、实施手册、实施过的公司的访谈

    OKR原理与实施手册,另外附了几家实施过OKR的公司的访谈. 书中表述的OKR思想,我认为是这两点: 1:始终聚焦在最重要的目标上: 2:不以OKR为考核员工的指标: Kindle电子版排版有小缺陷, ...

  4. Lazarus 字符集转换 Utf8ToAnsi,UTF8ToWinCP,UTF8ToSys,UTF8ToConsole

    由于Lazarus从1.2版开始默认字符集就是UTF8,如果要转到系统正常显示或文本保存,就必须对字符集进行转换.Lazarus提供了很多函数.如题. 那么这里面有什么关系呢? UTF8ToSys 需 ...

  5. Sturts2几个常用内建拦截器的介绍

    Sturts2几个常用内建拦截器的介绍:1)conversation:这是一个处理类型转换错误的拦截器,它负责将类型转换错误从ActionContext中取出,并转换成Action的FieldErro ...

  6. js数组的处理

    //重写Array中的indexOf方法,获取数组中指定值的元素的索引 Array.prototype.indexOf = function (val) { for (var i = 0; i < ...

  7. 继 S-HR之代码创建临时表并插入数据 完整功能之员工职业信息变更报表

    目的示例1: 制作员工职业信息报表[S-HR系统的报表其实就是列表o.0,醉了] EcirrWithPP.js shr.defineClass("shr.custom.EcirrWithPP ...

  8. [luogu4127 AHOI2009] 同类分布 (数位dp)

    传送门 Solution 裸数位dp,空间存不下只能枚举数字具体是什么 注意memset最好为-1,不要是0,有很多状态答案为0 Code //By Menteur_Hxy #include < ...

  9. <MyBatis>入门四 传入的参数处理

    1.单个参数 传入单个参数时,mapper文件中 #{}里可以写任意值 /** * 传入单个参数 */ Employee getEmpById(Integer id); <!--单个参数 #{} ...

  10. linux find-在指定目录下查找文件

    推荐:更多Linux 文件查找和比较 命令关注:linux命令大全 find命令用来在指定目录下查找文件.任何位于参数之前的字符串都将被视为欲查找的目录名.如果使用该命令时,不设置任何参数,则find ...