- 1、本文档共57页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章 windows套接字I/O模型 几种模型概览: ① select 模型: ?????? select模型是WinSock中应用最广泛的模型之一,核心就是select函数,它可用于判断套接字上是否存在数据,或者能否向一个套接字写入数据。这个函数可以有效地防止应用程序在套接字处于阻塞模式中时,send或recv进入阻塞状态;同时也可以防止产生大量的WSAEWOULDBLOCK错误select的优势是能够从单个线程的多个套接字上进行多重连接及I/O。这就避免了伴随阻塞套接字和多重连接的线程剧增。 ② WSAAsyncSelect 模型: ?????? 因为它是以消息为基础的,关键就是WSAAsyncSelect函数,将socket消息发送到hWnd窗口上,然后在那里处理相应的FD_READ、FD_WRITE等等消息。优点:WSAAsyncSelect和WSAEventSelect模型提供了读写数据能力的异步通知,但他们不提供异步数据传送,而重叠及完成端口提供异步数据的传送。而且它可以在系统开销不大的情况下同时处理很多连接,而select模型还需要建立fd_set结构。 缺点:必须要使用一个窗口接收消息,如果处理成千上万的套接字就力不从心了。 ③ WSAEventSelect 模型: ?????? 这个也是以时间为基础的网络事件通知,但是与WSAAsyncSelect不同的是,它主要是由事件对象句柄完成的,而不是通过窗口。优点:不需要窗口。缺点:每次只能等待64个事件,所以处理多个套接字时有必要组织一个线程池;所以伸缩性就不如后面的完成端口了。 ④ 重叠模型: ?????? 这个模型可以使程序能达到更佳的系统性能。基本设计原理就是让应用程序使用重叠的数据结构,一次投递一个或多个I/O请求。针对这些提交的请求,在他们完成之后,应用程序可为他们提供服务。它又分为两种实现方法:在事件中使用,还有就是完成例程。 ⑤ 完成端口: ?????? 完成端口提供了最好的伸缩性,往往可以使系统达到最好的性能,是处理成千上万的套接字的首选。从本质上说,完成端口模型要求创建一个windows完成端口对象,该对象通过指定数量的线程,对重叠I/O请求进行管理,以便为已经完成的重叠I/O请求提供服务。 3.1套接字模型 3.1.1阻塞模式 执行I/O的winsock调用一直到操作完成才返回,如send和recv。 Create socket对象时,默认工作在阻塞模式下。 3.1.2非阻塞模式 在此模式下,winsock函数会立即返回。 ※ 阻塞模型开发简单,但当APP需要处理多个套接字连接时,就必须创建多个线程,即典型的一个连接一个线程,不方便。所以在实际APP开发中使用非阻塞模型更多。 3.1.2非阻塞模式(续) 应用程序可以调用ioctlsocket函数显示的让socket工作在非阻塞模式,如下: int ioctlsocket( SOCKET s, long cmd, u_long FAR *argp ); s [in] Descriptor identifying a socket. cmd [in] Command to perform(执行) on the socket s. argp [in, out] Pointer to a parameter for cmd. Remarks: FIONBIO Use with a nonzero argp parameter to enable the nonblocking mode of socket s. The argp parameter is zero if nonblocking is to be disabled. The argp parameter points to an unsigned long value. When a socket is created, it operates in blocking mode by default (nonblocking mode is disabled). 一旦套接字处于nonblocking model,处理发送和接收数据或者管理连接的winsock调用将会立即返回。 (WSAEWOULDBLOCK错误) 3.2 选择(select)模型 ▲ 称其为select模型,主要是因为要使用select函数来管理I/O。 源于UNIX系统。 目的是允许那些想要避免在套接字调用上阻塞的APP有能力管理多个套接字。 应用较广泛。 3.2.1 select函数 Select函数 int select( int nfds, fd
您可能关注的文档
最近下载
- 《开国大典》ppt课件.pptx VIP
- Unit 4 Stage and screen 课件(共30张ppt) 外研版(2019)高中英语必修第二册.pptx VIP
- 2025年青岛职业技术学院单招职业适应性测试题库及答案一套.docx VIP
- 2024年《知识产权法》形考任务1答案.pdf VIP
- 高一数学备课组长工作总结.pptx VIP
- Moldflow模流分析入门与实战 课件 1.5 创建浇注系统.pptx
- BEVERLY 比佛利 QZBW20S-16净水机 说明书.pdf
- 困难退役军人帮扶计划书.pptx VIP
- 【优质课】《马克思主义的诞生与传播》说课课件.pptx VIP
- 畜产品质量安全知识课件.pptx
文档评论(0)