1 / 12
文档名称:

用完成端口开发大响应规模的winsock应用程序.doc

格式:doc   大小:143KB   页数:12页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

用完成端口开发大响应规模的winsock应用程序.doc

上传人:pppccc8 2019/10/15 文件大小:143 KB

下载得到文件列表

用完成端口开发大响应规模的winsock应用程序.doc

相关文档

文档介绍

文档介绍::..通常要开发网络应用程序并不是一件轻松的事情,不过,实际上只要隼握儿个关键的原则也就可以了一IJ建和连接一个套接字•尝试进行连接,然后收发数据。真正难的是耍写出一个可以接纳少则一个,多则数千个连接的网络应用程序。本文将讨论如何通过Winsock2在WindowsNT?和Windows2000上开发髙扩展能力的Winsock应用程序。文章主要的焦点在客户机/服务器模熨的服务器这一方,当然,其中的许多耍点对模型的双方都适用。API与响应规模通过Win32的重叠I/O机制,应用程序可以捉诸一项I/O操作,重叠的操作诸求在后台完成,而同一时间提请操作的线程去做其他的事惜。等觅叠操作完成后线程收到有关的通知。这种机制对那些耗时的操作而言特别有用。不过,()及UnixF的selectf)那样的函数虽然易于使用,但是它们不能满足响应规模的需要。而完成端口机制是针对操作系统内部进行了优化,在WindowsNT和Windows2000±,便用了完成端口的重叠I/O机制才能够真正扩大系统的响应规模。。当某项I/O操作一旦完成,某个可以对该操作结杲进行处理的工作者线程就会收到一则通知。而套接字在被创建后,可以在任何时候与某个完成端口进行关联。通常情况下,我们会在应用程序中创建一•定数虽的工作者线程來处理这些通知I。线程数虽取决于应用程序的特定需要。理想的情况是,线程数屍等于处理器的数屍,,以免线程阻塞。毎个线程都将分到一定的CPU时间,在此期间该线程可以运行,然后另一个线程将分到一个时间片并开始执行。如果某个线程执行了阻塞型的操作,操作系统将剥夺其未使用的剩余时间片并让英它线程开始执行。也就是说,飾一个线程没有充分使用英时间片,当发生这样的惜况时,应用程序应该准备其它线程來充分利用这些时间片。完成端口的使用分为两步。首先创建完成端口,如以下代码所示:HANDLEhlocp;hlocp=pletionPort(INVALID_H/kNDLE_VALUE,NULL,(ULONG_PTR)0,0);if(hlocp==NULL){//Error}完成端口创建后•耍把将便川该完成端口的套接字与之关联起來。pletionPort()。以下代码创建了一个套接字,并把它和前面创建的完成端口关联起來:SOCKETs;S=SOCket(,SOCK_STREAM,0);if(S==){//Errorif{pletionPort((HANDLE)s,hlocp.()0r0)==NULL)//Error)•••)这时就完成了套接字与完成端口的关联操作。在这个套接字上进行的任何重叠操作都将通过完成端口发出完成通知I。注盘,pletionPort()^i数中的第三个参数用來设置一个与该套接字相关的“pletionkey)”(译者注:完成键町以是任何数据类型)。每当完成通知到來时,应用程序可以读取相应的完成键,因此,完成键可川來给套接字传递一些背景信息。在创建了完成端口、将-个或名个套接字与之相关联Z后,我们就要创建若干个线程來处理完成通知。pletionStatus()怖数并返冋完成通知。下面,我们先來看看应用程序如何纵踪这些重叠操作。当应用程序调用一个霓叠操作函数时,要把指向一个overlapped结构的抬针包括创1:参数中。当操作完成后,pletionStatus()函数中拿冋这个指针。不过•单是松据这个折针所指向的overlapped结构,应用程序并不能分辨究竞完成的是哪个操作。要实现对操作的跟踪,你可以自己定义4-OVERLAPPED结构•在其中加入所需的跟踪信息。无论何时调用重叠操作函数时,总是会通过其IpOverlapped参数传递一个OVERLAPPEDPLUS结构()。这就允许你为每一个霾叠调川操作设置某些操作状态信息,()函数获得你自定义结构的折针。注意OVERLAPPED字段不耍求一•定是这个扩展后的结构的第一•个字段。当得到了折向OVERLAPPED结构的指针以后,(译者注:以上两小段哙是OVERLAPPEDPLUS结构,一会是OVERLAPPED