欢迎来到天天文库
浏览记录
ID:10874641
大小:105.00 KB
页数:8页
时间:2018-07-08
《手把手教你玩转socket模型之重叠io篇》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、手把手教你玩转SOCKET模型之重叠I/O篇“身为一个初学者,时常能体味到初学者入门的艰辛,所以总是想抽空作点什么来尽我所能的帮助那些需要帮助的人。我也希望大家能把自己的所学和他人一起分享,不要去鄙视别人索取时的贪婪,因为最应该被鄙视的是不肯付出时的吝啬。”-----题记ByPiggyXP(小猪)前言其实我首先应该道歉,因为7月份的时候曾信誓旦旦的说要写一套关于SOCKET所有模型的入门文章以及配套代码,不过没想到后天竟然被美女所迷出去度假了,刚刚回来不久。。。。。。-_-b其实那些模型的配套代码我已经基本写完了,只是没写
2、配套文字,不过我想还是先从稍微难一点的模型写起吧,因为其他模型的入门毕竟要简单一些。不过由于也是初学者,疏漏之处还望不吝指正。本文凝聚着笔者心血,如要转载,请指明原作者及出处,谢谢!^_^OK,Let’sgo!Havefun!!q^_^p本文配套的示例源码下载地址(VC.net2003编写的多客户端MFC代码,配有详尽注释,只是简单的显示一下客户端发来的字符,稍加改进就是个聊天室了):http://www.haha567.com/PiggyXP/OverlappedModel.rar(unix系统,千万注意链接大小写)非常
3、感谢网络版的limin兄弟为我无偿提供的空间,以及在我学习过程中给我的大力帮助与支持,真的非常感谢他,感激涕零啊~~~~~T_T也欢迎大家光临他的Blog一起讨论网络技术http://blog.haha567.com/(本文假设你已经具备用SOCKET简单模型编程的能力,如果对SOCKET一无所知请关注本系列其他文章)目录:1.重叠模型的优点2.重叠模型的基本原理3.关于重叠模型的基础知识4.重叠模型的实现步骤5.多客户端情况的注意事项一. 重叠模型的优点1. 可以运行在支持Winsock2的
4、所有Windows平台,而不像完成端口只是支持NT系统。2. 比起阻塞、select、WSAAsyncSelect以及WSAEventSelect等模型,重叠I/O(OverlappedI/O)模型使应用程序能达到更佳的系统性能。因为它和这4种模型不同的是,使用重叠模型的应用程序通知缓冲区收发系统直接使用数据,也就是说,如果应用程序投递了一个10KB大小的缓冲区来接收数据,且数据已经到达套接字,则该数据将直接被拷贝到投递的缓冲区。而这4种模型种,数据到达并拷贝到单套接字接收缓冲区中,此时应用程序会被告知可以读入的容
5、量。当应用程序调用接收函数之后,数据才从单套接字缓冲区拷贝到应用程序的缓冲区,差别就体现出来了。3. 从《windows网络编程》中提供的试验结果中可以看到,在使用了P41.7GXero处理器(CPU很强啊)以及768MB的回应服务器中,最大可以处理4万多个SOCKET连接,在处理1万2千个连接的时候CPU占用率才40%左右――非常好的性能,已经直逼完成端口了^_^二. 重叠模型的基本原理说了这么多的好处,你一定也跃跃欲试了吧,不过我们还是要先提一下重叠模型的基本原理。概括一点说,重叠模型是让
6、应用程序使用重叠数据结构(WSAOVERLAPPED),一次投递一个或多个WinsockI/O请求。针对这些提交的请求,在它们完成之后,应用程序会收到通知,于是就可以通过自己另外的代码来处理这些数据了。需要注意的是,有两个方法可以用来管理重叠IO请求的完成情况(就是说接到重叠操作完成的通知):1. 事件对象通知(eventobjectnotification)2. 完成例程(completionroutines),注意,这里并不是完成端口而本文只是讲述如何来使用事件通知的的方法实现重叠IO模型,完成例程的方
7、法准备放到下一篇讲:)(内容太多了,一篇写不完啊),如没有特殊说明,本文的重叠模型默认就是指的基于事件通知的重叠模型。既然是基于事件通知,就要求将Windows事件对象与WSAOVERLAPPED结构关联在一起(WSAOVERLAPPED结构中专门有对应的参数),通俗一点讲,就是。。。。对了,忘了说了,既然要使用重叠结构,我们常用的send,sendto,recv,recvfrom也都要被WSASend,WSASendto,WSARecv,WSARecvFrom替换掉了,它们的用法我后面会讲到,这里只需要注意一点,它们的参
8、数中都有一个Overlapped参数,我们可以假设是把我们的WSARecv这样的操作操作“绑定”到这个重叠结构上,提交一个请求,其他的事情就交给重叠结构去操心,而其中重叠结构又要与Windows的事件对象“绑定”在一起,这样我们调用完WSARecv以后就可以“坐享其成”,等到重叠操作完成以后,自然会有与
此文档下载收益归作者所有