WEB开发网
开发学院软件开发VC 一个简单的完成端口(服务端/客户端)类 阅读

一个简单的完成端口(服务端/客户端)类

 2009-02-25 19:59:50 来源:WEB开发网   
核心提示: 2.1 引言本文提出了一个类,可以用在客户端和服务端,一个简单的完成端口(服务端/客户端)类(2),这个类使用IOCP(Input Output Completion Ports)和异步(非阻塞)机制,…通过这些简单的源码,请求线程必须在可变等候状态下挂起,> 使用IO

2.1 引言

本文提出了一个类,可以用在客户端和服务端。这个类使用IOCP(Input Output Completion Ports)和异步(非阻塞)机制。…

通过这些简单的源码,你可以:

· 服务或连接多客户端和服务端

· 异步发送或接收文件

· 创建并管理一个逻辑工作者线程池,用以处理繁重的客户端/服务器请求或计算

找到一份全面但简单的解决客户端/服务器通信的源码是件困难的事情。在网络上找到的源码要么太复杂(超过20个类),要命没有提供足够的效率。本源码的设计尽可能简单,并提供了充足的文档。在这篇文章中,我们简洁的呈现出了Winsock API 2.0支持的IOCP技术,说明了在编写过程中出现的棘手问题,并提出了每一个问题的解决方案。

2.2 异步完成端口介绍

如果一个服务器应用程序不能同时支持多个客户端,那是毫无意义的,为此,通常使用异步I/O请求和多线程。根据定义,一个异步I/O请求会立即返回,而留下I/O请求处于等待状态。有时,I/O异步请求的结果必须与主线程同步。这可以通过几种不同方式解决。同步可以通过下面的方式实现:

> 使用事件 – 当异步请求结束时会马上触发一个信号。这种方式的缺点是线程必须检查并等待事件被触发

> 使用GetOverlappedResult函数 – 这种方式与上一种方式有相同的缺点。

> 使用Asynchronous Procedure Calls(或APC) – 这种方式有几个缺点。首先,APC总是在请求线程的上下文中被请求;第二,为了执行APC,请求线程必须在可变等候状态下挂起。

> 使用IOCP – 这种方式的缺点是必须解决很多实际的棘手的编程问题。编写IOCP可能有点麻烦。

上一页  1 2 3 4 5 6 7  下一页

Tags:一个 简单 完成

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