WEB开发网
开发学院软件开发VC 用完成端口开发大响应规模的Winsock应用程序 阅读

用完成端口开发大响应规模的Winsock应用程序

 2007-03-17 22:00:47 来源:WEB开发网   
核心提示: 接受连接请求服务器要做的最普通的事情之一就是接受来自客户端的连接请求,在套接字上使用重叠I/O接受连接的惟一API就是AcceptEx()函数,用完成端口开发大响应规模的Winsock应用程序(8),有趣的是,通常的同步接受函数accept()的返回值是一个新的套接字,你就可以判断你有没有

接受连接请求

服务器要做的最普通的事情之一就是接受来自客户端的连接请求。在套接字上使用重叠I/O接受连接的惟一API就是AcceptEx()函数。有趣的是,通常的同步接受函数accept()的返回值是一个新的套接字,而AcceptEx()函数则需要另外一个套接字作为它的参数之一。这是因为AcceptEx()是一个重叠操作,所以你需要事先创建一个套接字(但不要绑定或连接它),并把这个套接字通过参数传给AcceptEx()。以下是一小段典型的使用AcceptEx()的伪代码:

do {
  -等待上一个 AcceptEx 完成
  -创建一个新套接字并与完成端口进行关联
  -设置背景结构等等
  -发出一个 AcceptEx 请求
}while(TRUE);
作为一个高响应能力的服务器,它必须发出足够的AcceptEx调用,守候着,一旦出现客户端连接请求就立刻响应。至于发出多少个AcceptEx才够,就取决于你的服务器程序所期待的通信交通类型。比如,如果进入连接率高的情况(因为连接持续时间较短,或者出现交通高峰),那么所需要守候的AcceptEx当然要比那些偶尔进入的客户端连接的情况要多。聪明的做法是,由应用程序来分析交通状况,并调整AcceptEx守候的数量,而不是固定在某个数量上。

对于Windows2000,Winsock提供了一些机制,帮助你判定AcceptEx的数量是否足够。这就是,在创建监听套接字时创建一个事件,通过WSAEventSelect()这个API并注册FD_ACCEPT事件通知来把套接字和这个事件关联起来。一旦系统收到一个连接请求,如果系统中没有AcceptEx()正在等待接受连接,那么上面的事件将收到一个信号。通过这个事件,你就可以判断你有没有发出足够的AcceptEx(),或者检测出一个非正常的客户请求(下文述)。这种机制对Windows NT 4.0不适用。

上一页  3 4 5 6 7 8 9 10  下一页

Tags:完成 端口 开发

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接