关键词:IOCP TcpServer TcpClient 完成端口 服务器 达到6万连接 突破连接限制 压力测试工具 堵塞锁 非堵塞锁 无锁 Lock Free 并发队列 并发可扩充环形队列
首先感谢在行动和精神上给予本人支持的各位同行,在过去的日子,使得本人的IOCP研究进入了崭新的领域。本文及附件希望能给予更多人的帮助,限于商用等原因,除了原来的0.85版开源之外,更高版本不便开源,仅简单描述一些技术要点,请谅解。但附件的压力工具源码,仍然能给予很多帮助,比如封包、解包、处理粘包等,同是压力工具还能帮助开发者测试服务器的性能,而且此帮助并不仅仅是一般的帮助。(其他的IOCP方法网上都有介绍,这里不多说。)
一、TcpServer
1、结构及流程
A、看守线程负责响应接受投递不足时的事件并投递接受请求,同是处理空连接和心跳超时
B、工作线程负责处理读写完成及读写错误的处理,并投递给处理线程
C、由于在工作处理数据及进行文件和数据库读写等操作可能会造成通信“卡”的现象,因此增加了处理线程,通过完成队列和线程池,接受工作线程投递过来的事件,处理线程通过回调函数将IO操作结果传递给应用层,应用层完全可以在回调函数里处理数据,从而实现了0拷贝功能,并保证数据的有序处理。
2、运行信息
为能更好的测试模块,开发者可参考截图的信息内容,对自己的模块进行测试开发工作,以帮助观察运行情况判断问题所在。
二、不可忽视的关闭工作
很多人在关闭通讯模块的时候,关闭所有连接和线程然后把记录的所有的内存都一一释放就结束了关闭工作。这样尽管没有内存泄露,但却可能隐蔽了其他问题。
正确的做法是:
1、关闭监听
2、关闭所有在线连接
3、等待关键计数器(内存池、连接池等使用计数器)归零 (这一步非常重要,这步过不了关肯定有问题)
4、关闭所有线程
5、逐一释放内存资源
6、变量复位
三、后IOCP时代
个人认为,微软的IOCP模型并不是Windows socket的终极,IOCP部分功能和效率仍然有待改进,以及Windows socket接口仍然不是高效率的体现,对开发有高要求的人,尤其是研究过Win2000源码的人,更深有体会。大家都知道,凡是满足功能强大的软件,效率在一定程度上会打折扣,针对高效率模型提供专有的Socket API才是关键,而不是一个API通用任何模型。微软到底是改进现有功能呢,还是提供更有效率的模型,这个只有微软才知道了。
四、IOCP的更高境界
入题前先给线程同步的锁分类:1、堵塞锁:系统提供的内核态的同步机制(内核态切换的效率众所周知),2.、非堵塞锁:诸如LockFree等使用原子操作指令完成的同步机制,3、无锁:堵塞锁、非堵塞锁之外的同步机制,确实的说是没有锁的机制。网络及书本上介绍的IOCP,常用做法都是使用堵塞锁的方式,打破传统思维才能获得创新。在过去的日子中,本人已经实现了非堵塞锁并发同步的IOCP模块。并根据IOCP Tcp Server的特殊情况,能在多线程下某些竞争的地方不使用锁亦能实现并发式同步的功能。这个模块实现,需要对IOCP
Tcp Server的数据结构(主要是队列)进行深入分析,根据实时性、使用频率等归纳总结,判断出:哪些需要立即处理的,哪些可以暂缓处理而又不影响效率的,哪些需要锁的,哪些不需要锁的,哪些需要堵塞锁的,哪些不需要堵塞锁的,需要堵塞锁的能不能换个角度可以使用非堵塞锁来解决等。
五、附件
1、突破连接限制的注册表设置方法及工具
比较全面的介绍突破连接限制。
2、功能相当强大的压力测试工具的源码、G-TcpClient.Lib(限制版)
有助于开发者学习和制作测试压力测试工具,另有封包、解包、处理粘包等。G-TcpClient.Lib是限制版,主要是和压力工具配套方便学习压力工具源码。
3、堵塞锁模式的服务器Exe、堵塞锁模式的压力测试工具exe
有助于测试自己的服务器和客户端。压力测试工具单机可以达到6万连接,附有说明书。
附件下载链接:
http://download.csdn.net/source/2566607
分享到:
相关推荐
原版本升级,更稳定功能更强 ...三、 可以发起密集数据包,包括即时和定时发送 四、 数据发送工作由一个独立线程担当,连接发起工作可设置多个独立的线程担当。 五、 可以多种模式组合连接或发送数据。
原版本升级,更稳定功能更强 ...三、 可以发起密集数据包,包括即时和定时发送 四、 数据发送工作由一个独立线程担当,连接发起工作可设置多个独立的线程担当。 五、 可以多种模式组合连接或发送数据。
内容索引:VC/C++源码,网络相关,TCP,压力测试 强大的TcpServer压力测试工具及源码,附突破连接限制的方法和工具,有一些关于窗体和线程的东西,比如设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动;...
Tcp和Udp测试小工具源码,有助于理解Tcp和Udp,编译环境为VS2013Update5或更高
程序中对突破最大连接办法和G-Sockets(压力测试工具源码)进行了公开,内部包括了一个基于完成端口的Tcp客户端通讯模块,编写代码时做以下说明: 一、使用G-TcpClient模块 二、可以设定间隔时间发起大规模长、短...
C#开发的TCP/UDP连接测试程序源码
MODBUS TCP SERVER 源码,c++,实现了功能码 03,16。只是自己用于测试时开发的,功能有限,但可自行扩充。希望对您有用。
C# Socket TCP和UDP报文及端口测试工具的开发(提供源码)万能超好测试工具 C# Socket TCP和UDP报文及端口测试工具的开发(提供源码)万能超好测试工具
TCPserver 测试源代码,用于学习研究,了解TCP UDP原理
android TCP server 和TCP client通信源码 手机成功与串口WIFI模块ST-MW-08S通信。
C#,winform,Tcp通信源码 使用TcpListener和TcpClient 源码 Tcp通信源码TcpListener和TcpClient 源码
QT编写tcpsocket测试工具源码 QT编写tcpsocket测试工具源码 没有做中文翻译已经经过测试了
适用于Windows/Linux/MAC平台,使用REALbasic编写 无需更改任何代码,只需要在不同的平台上编译,即可做为本地执行文件运行。...适用于编写TCP协议程序时做为测试工具。 REALbasic请到www.realsoftware.com
TCP通讯测试连接工具(含C#源代码),方便对TCP通讯进行测试
C# UDP/TCP协议 网络调试工具源码 本代码包括了TCP和UDP的客户端和服务端,适合C#初学者学习、参考