没有合适的资源?快使用搜索试试~ 我知道了~
ACE Tutorial翻译
5星 · 超过95%的资源 需积分: 3 144 下载量 193 浏览量
2008-11-29
23:13:04
上传
评论
收藏 518KB DOC 举报
温馨提示
试读
64页
整理自http://jnn.blogbus.com/tag/ACE_TAO/的ACE教程翻译
资源推荐
资源详情
资源评论
ACE Tutorial [翻译]
注:文章整理自 jnn 的 blog,为方便阅读,整理成单独的 word 文档
整理时间:2008.11.29 23 时 6 分 5 秒 by Blade
blog 地址: http://jnn.blogbus.com/tag/ACE_TAO/
ACE 教程 [翻译] (前言)
2004-10-24
:
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
写在前面的话
很早以前就有写一个 ACE 教程的冲动,其实当初的目的很简单,
就是想让自己能够更好的学习 ACE,理解 ACE,应用 ACE。遗憾的
是一直都没有找到一个合适的入手点。
其实目前世面上的有个 ACE 介绍的书很多,其中有:
C++ Network Programing V1
C++ Network Programing V2
ACE Programmer's Guide
这些书的中文译本有些已经出版了,有些也要马上出版。
不知道大家留心 ACE 发行包中的 doc 目录下面还有一个大概是
2000 年左右写的教程,我找了一下目前还没有看到有中文的译本,于
是就想把这个教程整理一下翻译成为中文。也算是 ACE 这个开源项
目在国内的推广尽微薄力了。
也许你会问,2004 年的现在,有这么多讲述 ACE 的书了,为什么还
要翻译这个教程呢?
我觉得首要的一点是因为这个教程是为零起点的用户写的,通过对
有关 ACE 最基本的概念的介绍,以及简单的例子程序,让读者能够
迅速入手。另外本教程最大特点就是对示例代码有特别详细的注释,
通过阅读这些注释,能够比较对代码的来龙去脉有比较清楚的了解,
即刻将所学的东西运用与实际的编程中。最后,通过翻译这个教程,
能够再一次熟悉 ACE 的各部分功能,我将努力把自己对 ACE 的理解
和大家分享。
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 很难理解,不必担心。我
们将通过代码细节再向你详细讲述。所以你可以把上面的内容先放在
一边,当你在代码中遇到的时候在回顾一下。
ACE Tutorial [翻译] 01-page02
2004-10-24
:
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
从现在开始,我们将把目光集中在主循环程序中。虽然这段代码是我
们最后的实现产品,但是由于这段代码很简单,因此是一个比较好的
入手点。因为大量的时间工作是由的派生类来实现的,所以主程序的
确特别简单。
Kirthika Parameswaran提供了对教程 1 的简要描述:
这是一个简单的日志服务器例子。Reactor 采用单线程而不是一个客户
一个线程方式,实现了的多个客户的请求处理。Reactor 负责响应事件,
并通过“callback 技术将事件转发到注册了该事件的
Event_Handler。Reactor 在一个死循环中运行,用以响应所有的到来
的事件。
Logging_Acceptor 监听一个叫做 SERVER PORT 的网络地址,并被动
地接收到来的请求。这个 Acceptor 也是一个注册到 Reactor 上的
Event_Handler。对于 Reactor 来说,这只是又一个简单的
Event_Handler,不需要对其进行特别的处理。一旦客户连接事件发生,
剩余63页未读,继续阅读
资源评论
- zmphone2011-10-26教材简单易懂,初学比较适合
- sonyzb2012-11-15有点用,但太简单了
staryy
- 粉丝: 31
- 资源: 25
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功