ACE_教程 - GOOGLECODE.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ACE_教程 - GOOGLECODE

ACE 教程 [翻译] (前言) 2004-10-24 Tag:ACE_TAO 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 /logs/459040.html 很早以前就有写一个ACE教程的冲动,其实当初的目的很简单,就是想让自己能够更好的学习ACE,理解ACE,应用ACE。遗憾的是一直都没有找到一个合适的入手点。 其实目前世面上的有个ACE介绍的书很多,其中有: C++ Network Programing V1 C++ Network Programing V2 ACE Programmers Guide 这些书的中文译本有些已经出版了,有些也要马上出版。 不知道大家留心ACE发行包中的doc目录下面还有一个大概是2000年左右写的教程,我找了一下目前还没有看到有中文的译本,于是就想把这个教程整理一下翻译成为中文。也算是ACE这个开源项目在国内的推广尽微薄力了。 也许你会问,2004年的现在,有这么多讲述ACE的书了,为什么还要翻译这个教程呢? 我觉得首要的一点是因为这个教程是为零起点的用户写的,通过对有关ACE最基本的概念的介绍,以及简单的例子程序,让读者能够迅速入手。另外本教程最大特点就是对示例代码有特别详细的注释,通过阅读这些注释,能够比较对代码的来龙去脉有比较清楚的了解,即刻将所学的东西运用与实际的编程中。最后,通过翻译这个教程,能够再一次熟悉ACE的各部分功能,我将努力把自己对ACE的理解和大家分享。 初学者如何实现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最强大的地方,

文档评论(0)

pangzilva + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档