ACE Tutorial [翻译]01-page01 :: 风之谷
来源: BlogBus 原始链接: http://www.blogbus.com:80/blogbus/blog/diary.php?diaryid=459148 存档链接: https://web.archive.org/web/20041123134233id_/http://www.blogbus.com:80/blogbus/blog/diary.php?diaryid=459148
风之谷 有关ACE/TAO,还有CORBA的学习资料 <<<ACE 教程 [翻译] (前言) | 首页 | ACE Tutorial [翻译] 06 -page02>>> ACE Tutorial [翻译]01-page01 时间:2004-10-24 初学者如何实现 ACE 工具包 本教程的目的是向你展示如何创建一个简单的能够同时响应多个客户连接的服务器程序。于“传统”的服务器端应用不同,本服务程序只在一个进程中响应所有的客户请求。有个多进程或者多线程方面的问题将在本教程的后续部分讨论。 创建一个服务器需要做那些事情? 1. 需要接受客户端的请求 2. 建立连接后相关处理 3. 需要一个主程序来循环处理上面内容 ACE 中的 Acceptor 为我们服务器程序需求提供了一个很好的解决方案。这个类通过给定的 TCP/IP 端口号监听客户发来的连接请求。当 acceptor 接收到的连接请求后,它将创建一个新的对象( the handler )来处理客户的请求,同时 acceptor 返回并监听其他的连接。 ACE 中的 EventHandler 可以满足我们的第二个需求。虽然这样看上去不太明显,但是随着教程的深入,大家将会逐渐认识到 EventHandler 的重要性。 最后,通过一个简单的 main() 方法来实现的我们的循环处理程序。循环处理程序的作用就是在所有的初始化操作完毕之后,进入一个死循环,在该循环中负责调用 Acceptor 处理客户连接请求或者调用 EventHandler 处理数据“事件”。 在我们继续下面教程之前,需要向大家介绍一下 ACE 中的另一个重要概念, Reactor (反应器) 在现在的阶段我不希望大家对什么是 reactor , reactor 是做什么的,以及 reactor 是如何实现这些细节很了解,但是你需要能够理解 reactor 最基本的功能,因为在下面的第一段代码中,将会出现 reactor 。(负责注册事件处理句柄以及分发网络事件) 下图展示的 Reactor , Acceptor 以及应用处理句柄之间的相互关系。 简单来说: reactor 是一个负责对发生在其他对象的事情作出响应的对象。这些事情被称之为事件。其他对象是你向 reactor 注册的通讯对象。在向 reactor 注册的过程时,你可以向这些对象指定你所感兴趣的事件。当你注册的对象感兴趣的事件发生时,操作系统会将这些事件向 reactor 转发。 Reactor 通过调用注册对象的成员方法来处理这些事件。注意 reactor 并不关心事件是如何发生的。它只是负责正确的处理事件。 Reactor 只是简单地向注册对象转发事件。 为什么使用 reactor ? 这将随着教程的深入,而逐渐清晰。现在,一个比较简单的回答是,它能够允许多个客户的同时连接能够在一个单线程服务器中有效地被处理。 传统地服务器一般都会每一个所服务的客户创建一个独立的线程或者进程。对于一个服务量比较大的服务(例如 telnet 和 ftp )这样的策略是很正确的。但是对于一个轻量级的服务俩说,创建处理进程所代来的系统负担已经超出的实际工作的负担。所以大家开始使用线程来替代进程来处理客户的请求。这是个比较好的解决方案,但是在一些情况下,也会对系统带来很大的负担。相比之下,为什么不使用单线程来响应多个客户的请求,或者是使用比一个线程 / 进程一个客户更加智能的负载均衡方法来实现。 Caveat :在一个进程中的一个线程里面处理所有的请求只在这个请求可以立刻被处理完的情况下适用。 这就是 reactor 最强大的地方,同时也是最方便扩展的地方。开发者可以创建一个简单的,单线程的应用,在后面的教程里,可以进一步扩展到 线程
每
用户,进程
每
用户或者是线程池的解决方案。 如果是上面的胡言乱语使你认为 ACE 很难理解,不必担心。我们将通过代码细节再向你详细讲述。所以你可以把上面的内容先放在一边,当你在代码中遇到的时候在回顾一下。 jnn 发表于 2004-10-24 23:52 引用Trackback(0) | 编辑 评论 发表评论 最后更新 ACE Tutorial [翻译] 06 -page05 ACE Tutorial [翻译] 06 -page04 ACE Tutorial [翻译] 06 -page03 ACE Tutorial [翻译] 06 -page02 ACE Tutorial [翻译] 06 -page01 ACE Tutorial [翻译] 05 -page05 ACE Tutorial [翻译] 05 -page04 ACE Tutorial [翻译] 05 -page03 ACE Tutorial [翻译] 05 -page02 ACE Tutorial [翻译] 05 -page01