基于完成端口的网络服务应用程序开发
2009-07-13王爱平唐玄
王爱平 唐 玄
[摘要]由于互联网的普及,在线人数也越来越多,这就提高对服务器端应用程序性能的要求。因此,讲述windows平台上高性能网络服务应用程序的开发方法。
[关键词]完成端口IOCP网络服务
中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)1110084-01
一、引言
随着网络的广泛应用,企事业单位、公司都需要开发网络服务应用程序,用于和客户进行交互。网络服务应用程序一般可采用B/S、C/S模式开发,其中,B/S模式已经广泛地应用在WEB应用程序上。然而,要实现实时、高性能的网络服务应用程序,仍需要采用C/S模式的开发方式。在windows操作系统环境下,使用C/S模式开发,主要考虑网络服务程序的服务器端程序性能,能支持大量用户并发。这就需要使用完成端口模型来开发服务器端程序。
二、使用完成端口
完成端口,又称Input/Output Completion Port(IOCP),是windows
操作系统中非常复杂的一种I/O模型。它可以同时为大量的SOCKET提供服务,因此它是windows操作系统中开发高性能网络应用服务器的首选。
创建完成端口时,windows操作系统会创建一个内核对象。使用完成端口时,将该内核对象与SOCKET进行关联,则SOCKET产生的事件会通知到该完成端口,此时,就可以通过完成端口对SOCKET进行相关操作了。
使用完成端口常用3个相关函数:
1.CreateIoCompletionPort(
HANDLE FileHandle,
HANDLE ExistingCompletionPort,
ULONG_PTR CompletionKey,
DWORD NumberOfConcurrentThreads);
本函数用来创建完成端口对象、关联完成端口对象和其他内核对象。
FileHandle是用来和完成端口对象关联的内核对象句柄;ExistingCo
mpletionPort是已经创建好的完成端口对象句柄,FileHandle所指定的内核对象I/O事件将会通知到该完成端口对象;CompletionKey是完成键,可以为任何用户指定的值,其目的是程序可以借此参数和完成端口之间传递值,方便与完成端口之间的通信。……
