功能强大的IOCP Socket Server模块源码——完成端口通讯服务器(IOCP Socket Server)设计(六)

ygluu 2009-09-21 11:50:53
加精
完成端口通讯服务器(IOCP Socket Server)设计
(六)功能强大的IOCP Socket Servre模块源码

Copyright © 2009 代码客(卢益贵)版权所有
QQ:48092788 源码博客:http://blog.csdn.net/guestcode


一、声明
版权声明:
1、通讯模块代码版权归作者所有;
2、未经许可不得全部或部分用于任何项目开发;
3、未经许可不得部分修改后再利用源码。

免责声明:
1、 由于设计缺陷或其它Bug造成的后果,作者不承担责任;
2、未经许可的使用作者不提供任何技术支持服务。

权利和义务:
1、任何获得源码并发现Bug的个人或单位均有义务向作者反映;
2、作者保留追究侵权者法律责任的权利。

二、开发背景
部分代码由前项目分离而来,尚未有应用考验,但对于初学者的学习和进阶会有很大帮助,通过这个例程可以深入了解IOCP Socket。性能上尚未有定论,但应该不会令你失望。

三、功能说明
1、可以关闭Socket的Buffer;
2、可以关闭MTU(不等待MTU满才发送);
3、可以多IP或多端口监听;
4、可以重用socket(主动关闭除外);
5、可以0缓冲接收(Socket的Buffe = 0时,避免过多的锁定内存页);
6、可以0缓冲连接(客户端仅连接,不一定立即发数据);
7、可以条件编译:
a、是否使用内核Singly-linked lists;
b、是否使用处理线程(工作线程和处理线程分开);
c、是否使用内核锁来同步链表。
8、可以实现集群服务器模式的通讯(有客户端socket);
9、可以单独设置每个连接的Data项来实现连接和Usernfo的关联;
10、每个线程有OnBegin和OnEnd,用于设置线程独立的对象(数据库会话对象);
11、可以提供详细的运行情况,便于了解IOCP下的机制,以及进行调试分析;
12、可以发起巨量连接和数据(需要硬件配置来支持)。

四、缺陷
1、不支持UDP;
2、不兼容IPv6;
3、不带通讯协议,无法处理粘包;
4、工作线程和处理线程隔离还不是很明确;
5、设计尚需再完善和优化。

五、通讯速率测试部分截图
A机:单核台式机(服务端)
B机:双核笔记本(客户端)
网络:本地100M路由
由于台式机太老,用尽CPU还是不能用完带宽(其中大部分被“system”进程使用),因此改做服务器,由笔记本做客户端,发起密集数据,以堵塞的情况来满负荷使用网络,收发接近:10MB。
注意:由于测试条件太差,下面截图不能说明任何权威结果。

服务器端设置:


服务器端运行信息:


客户端设置:


客户端运行信息:


客户端网络利用率:


客户端CPU利用率:


下载连接:
http://d.download.csdn.net/down/1679785/guestcode


The end




...全文
14536 53 打赏 收藏 转发到动态 举报
写回复
用AI写文章
53 条回复
切换为时间正序
请发表友善的回复…
发表回复
hoisf 2012-04-02
  • 打赏
  • 举报
回复
刚开始学IOCP,很有帮助
狂风暴雨 2012-03-21
  • 打赏
  • 举报
回复
才学iocp。。看看啦。。谢啦
yinor 2012-03-15
  • 打赏
  • 举报
回复
谢谢,最近开始学习IOCP
星火燎猿 2011-08-11
  • 打赏
  • 举报
回复
NX..............
hndd0000 2011-07-20
  • 打赏
  • 举报
回复
还在研究,写的很好
liguo9860 2011-07-13
  • 打赏
  • 举报
回复
看不懂, 忽忽。
lxinl 2011-07-05
  • 打赏
  • 举报
回复
贵在分享。。
lxinl 2011-07-04
  • 打赏
  • 举报
回复
我是来学习的
牧心 2011-07-01
  • 打赏
  • 举报
回复
虚心学习
xiaoshiquan 2011-06-15
  • 打赏
  • 举报
回复
虚心学习
mihi1978 2010-12-10
  • 打赏
  • 举报
回复
虚心学习
canshancai 2010-11-19
  • 打赏
  • 举报
回复
貌似不懂,学习
wenqinwuhai 2010-11-18
  • 打赏
  • 举报
回复
Mark,留个脚印!
liu1987sheng 2010-07-28
  • 打赏
  • 举报
回复
学习,寻找了好久~~
gjh315 2010-06-10
  • 打赏
  • 举报
回复
值得学习
xszlj 2010-04-23
  • 打赏
  • 举报
回复
不错,顶
hzhlog 2010-04-01
  • 打赏
  • 举报
回复
支持,严重支持
lllsui 2010-03-25
  • 打赏
  • 举报
回复
支持 学习
tj_swjtu 2010-03-24
  • 打赏
  • 举报
回复
我是新手,大家多多支持。
Tkun 2010-03-11
  • 打赏
  • 举报
回复
最近正在研究 SOCKET这边的东西
加载更多回复(26)
完成端口通讯服务器IOCP Socket Server设计功能强大IOCP Socket Servre模块例程源码 Copyright © 2009 代码客(卢益贵)版权所有 QQ:48092788 源码博客:http://blog.csdn.net/guestcode 一、声明 版权声明: 1、通讯模块代码版权归作者所有; 2、未经许可不得全部或部分用于任何项目开发; 3、未经许可不得部分修改后再利用源码。 免责声明: 1、 由于设计缺陷或其它Bug造成的后果,作者不承担责任; 2、未经许可的使用作者不提供任何技术支持服务。 权利和义务: 1、任何获得源码并发现Bug的个人或单位均有义务向作者反映; 2、作者保留追究侵权者法律责任的权利。 二、开发背景 部分代码由前项目分离而来,尚未有应用考验,但对于初学者学习和进阶有很大帮助。性能上尚未有定论,但应该不会令你失望。 三、功能说明 1、可以关闭Socket的Buffer; 2、可以关闭MTU(不等待MTU满才发送); 3、可以多IP或多端口监听; 4、可以重用socket(主动关闭除外); 5、可以0缓冲接收(Socket的Buffe = 0时,避免过多的锁定内存页); 6、可以0缓冲连接(客户端仅连接,不一定立即发数据); 7、可以条件编译: a、是否使用内核Singly-linked lists; b、是否使用处理线程(工作线程和处理线程分开); c、是否使用内核锁来同步链表。 8、可以实现集群服务器模式的通讯(有客户端socket); 9、可以单独设置每个连接的Data项来实现连接和Usernfo的关联; 10、每个线程有OnBegin和OnEnd,用于设置线程独立的对象(数据库会话对象); 11、可以提供详细的运行情况,便于了解IOCP下的机制,以及进行调试分析; 12、可以发起巨量连接和数据(需要硬件配置来支持)。
有牛人曾经说过,服务器玩的就是内存。仔细想想,确实是如此。服务器对内存的需求是巨大的,对内存的要求也是苛刻的。如何在内存管理上下功夫使服务器性能达到一个质的飞跃,是服务器设计中的首要解决的问题。 说到内存,我想刚开始设计服务器的人会说,不就申请释放吗,有什么难呢。从操作步骤来说,确实就这么两个,没有再多了的工作了。当我们采用虚拟内存分配或堆分配从操作系统获取内存的时候,总以为我们获得了足够的内存就可以让服务器安心工作了。但事情并未就这么简单,操作系统在一定条件下,还可以征用已经分配给你的物理内存,它会将你的物理内存数据复制到页交换文件中,然后把本来给你的物理内存再分配给别的进程,当你的进程访问你所获得的虚拟地址集的数据时,它会再找个空(或许也是从别的进程征用)的物理内存,再从页交换文件里面调出你原来的数据放回到新的物理内存里面,并将这个物理内存映射到你申请的虚拟内存地址集内(有关这项内容请参考操作系统的内存管理)。这个过程是相当耗费CPU资源且十分缓慢的,尤其是对硬盘虚拟内存文件的读写。其它大道理本文不多说,关于操作系统内存管理的原理可以从《Windows核心编程》、《Windows操作系统》、《操作系统》等书籍上了解。 我们可以使用lookaside lists技术来重新使用已经分配的内存的,或者使用SetWorkingSetSize来设置标志告知操作系统不要交换我的内存,但不外乎多一次操作而已。这个操作到底消耗多少的CPU资源,本人也没有考究过,但从性能要求的角度来说,多一事不如少一事。本文讨论的内存管理,将采用AWE(地址窗口化扩展)的技术,将申请到的物理内存保留为非分页内存,这部分的内存不会被页交换文件所交换,关于AWE请参阅以上提到的书籍。(下面提到的“内存管理”,将仅针对应用程序自己的内存管理功能模块(下文称之为内存管理器)而言,已非上面提到的操作系统的内存管理。) 衡量内存管理器性能的有两个,一个是内存分配时的效率(分配效率),另一个内存交还时的效率(释放效率),亦即二者操作的时间性,这个时间越短那么可以认为它的效率越高。下面的讨论,假定内存管理器是以页为最小分配单位,至于页的大小是多少才合适,稍后再说。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧