??xml version="1.0" encoding="utf-8" standalone="yes"?>夜夜爽夜夜爽精品视频,亚洲激情在线视频,国产精品久久精品日日http://www.shnenglu.com/woaidongmao/category/6784.htmlzh-cnMon, 19 May 2008 22:19:38 GMTMon, 19 May 2008 22:19:38 GMT60C++|络~程 ACE相关资料攉http://www.shnenglu.com/woaidongmao/archive/2008/04/18/47534.html肥仔肥仔Fri, 18 Apr 2008 12:48:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2008/04/18/47534.htmlhttp://www.shnenglu.com/woaidongmao/comments/47534.htmlhttp://www.shnenglu.com/woaidongmao/archive/2008/04/18/47534.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/47534.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/47534.html2008-04-04 14:44

飞驴的|站 http://www.flyingdonkey.com/ 马维?C++|络~程 卷二 译?

http://www.flyingdonkey.com/cgi-bin/LB5000MX/leoboard.cgi
WeiZone 我们的社?http://www.weizone.com/forumdisplay.php?fid=22&page=1 ACE|络通讯~程?

LoveUnix技术论?http://www.loveunix.com/viewthread.php?tid=29276
hxhQ贺星河Q的专栏 http://blog.csdn.net/hxhbluestar/category/25379.aspx ACE|络~程
ACE自适配通信环境讨论 http://www.huihoo.org/chat/ace_20030702.html
[ACE技术论文集]一.ACE自适配通信环境Q用于开发通信软g的面向对象网l编E工具包
ACEE序入口函数替换机制分析
[ACE技术论文集]?包装外观QWrapper FacadeQ:用于在类中封装函数的l构型模?/a> _֍帖标? src=
[ACE技术论文集]?IPC SAPQ用于高效、可UL和灵zȝ|络~程的C++包装
[ACE技术论文集]?ACE轻量UOSq发机制的OO装
[ACE技术论文集]?C/C++U程专有存储Q用于访问“per-Thread”状态的对象行ؓ模式
ACE的类l构图[pdf文档]
ACE自适配通信环境
Douglas C. Schmidt
一、ACElD
  ACE自适配通信环境QADAPTIVE Communication EnvironmentQ是可以自由使用、开放源码的面向对象QOOQ框ӞFrameworkQ,在其中实C许多用于q发通信软g的核心模式。ACE提供了一l丰富的可复用C++ Wrapper FacadeQ包装外观)和框架组Ӟ可跨多U^台完成通用的通信软gdQ其中包括:事g多\分离和事件处理器分派、信号处理、服务初始化、进E间通信、共享内存管理、消息\由、分布式服务动态(重)配置、ƈ发执行和同步Q等{?br>ACE的目标用h高性能和实旉信服务和应用的开发者。它化了使用q程间通信、事件多路分R显式动态链接和q发的OO|络应用和服务的开发。此外,通过服务在运行时与应用的动态链接,ACEqɾpȝ的配|和重配|得以自动化?br>ACE正在q行持箋的改q。Riverace公司Q?a >http://www.riverace.comQ采用开放源码商业模式对ACEq行商业支持。此外,ACE开发组的许多成员目前正在进行The ACE ORBQTAOQ?a >http://www.cs.wustl.edu/~schmidt/TAO.htmlQ的开发工作?br>二、用ACE的好?br>使用ACE的好处有Q?br>l    增强可移植性:在ACElg的帮助下Q很Ҏ在一UOSq_上编写ƈ发网l应用,然后快速地它们移植到各种其他的OSq_上。而且Q因为ACE是开放源码的自由软gQ你无需担心被锁定在特定的操作系l^台或~译器上?br>l    更好的Y件质量:ACE的设计用了许多可提高Y件质量的关键模式Q这些质量因素包括通信软g灉|性、可扩展性、可复用性和模块性?br>l    更高的效率和可预性:ACEl仔l设计,支持q泛的应用服务质量(QoSQ需求,包括延迟敏感应用的低响应{待旉、高带宽应用的高性能Q以及实时应用的可预性?br>l    更容易{换到标准的高U中间gQTAO使用了ACE提供的可复用lg和模式。它是CORBA的开发源码、遵循标准的实现Qƈ为高性能和实时系l作了优化。ؓ此,ACE和TAO被设计ؓ能良好地协同工作Q以提供全面的中间g解决Ҏ?br>三、ACE的结构和功能
下图昄了ACE中的关键lg以及它们的层ơ关p:
图中的结构和各层的组成部分描q如下?br>四、ACE OS适配?br>该层直接位于用C写成的本地OS API之上。它提供d的类POSIX OS适配层,ACE中的其他层及lg和以下与OS API相关联的q_专有Ҏ屏蔽开来:
l    q发和同步:ACE的适配层封装了用于多线E、多q程和同步的OS API?br>l    q程间通信QIPCQ和׃n内存QACE的适配层封装了用于本地和远地IPC、以及共享内存的OS API?br>l    事g多\分离机制QACE的适配层封装了用于对基于I/O、定时器、信号和同步的事件进行同步和异步多\分离的OS API?br>l    昑ּ动态链接:ACE的适配层封装了用于昑ּ动态链接的OS API。显式动态链接允许在安装时或q行时对应用服务q行配置?br>l    文gpȝ机制QACE的适配层封装了用于操作文g和目录的OS文gpȝAPI?br>ACE OS适配层的可移植性得ACE可运行在许多操作pȝ上。ACE已在q泛的OSq_上进行了UL和测试,包括Win32Q也是Q在Intel和Alphaq_Q用MSVC++、Borland C++ Builder和IBM Visual Age的WinNT 3.5.x?.x?000、Win95/98和WinCEQ、Mac OS X、大多数版本的UNIXQ例如,SPARC和Intel上的Solaris 1.x?.x、SGI IRIX 5.x?.x、DG/UX、HP-UX 9.x?0.x?1.x、DEC/Compaq UNIX 3.x?.x、AIX 3.x?.x、UnixWare、SCOQ以及可自由使用的UNIX实现Q比如Debian Linux 2.x、RedHat Linux 5.2?.x?.x、FreeBSD和NetBSDQ、实时操作系l(比如QLynxOS、VxWorks、Chorus ClassiX 4.0、QnX Neutrino、RTEMS和PSoSQ、MVS OpenEdition和CRAY UNICOS?br>׃ACE的OS适配层所提供的抽象,所有这些^C用同一代码树。这L设计极大地增ZACE的可UL性和可维护性。此外,q有Java版本的ACE可用Q?a >http://www.cs.wustl.edu/~eea1/JACE.htmlQ?br>五、OS接口的C++ Wrapper Facade
可以直接在ACE OS适配层之上编写高度可UL的C++应用。但是,大多数ACE开发者用的是上图中所C的C++ Wrapper Facade层。通过提供cd安全的C++接口Q这些接口封装ƈ增强本地的OSq发、通信、内存管理、事件多路分R动态链接和文gpȝAPIQ,ACE Wrapper Facade化了应用的开发。应用可以通过有选择地ѝ聚合和/或实例化下面的组件来l合和用这些包装:
l    q发和同步组ӞACE对像互斥体和信号量这L本地OS多线E和多进E机制进行抽象,以创建高U的OOq发抽象Q像d对象QActive ObjectQ和多态期货(Polymorphic FutureQ?br>l    IPC和文件系l组ӞACE C++包装Ҏ地和/或远地IPC机制q行装Q比如socket、TLI、UNIX FIFO和STREAM道Q以及Win32命名道。此外,ACE C++包装q封装了OS文gpȝAPI?br>l    内存理lgQACE内存理lg为管理进E间׃n内存和进E内堆内存的动态分配和释放提供了灵zd可扩展的抽象?br>ACE C++包装提供了许多与ACE OS适配层一LҎ。但是,q些Ҏ是采用C++cd对象、而不是独立的C函数来构造的。这LOO包装有助于减正地学习和用ACE所需的努力?br>例如QC++的用提高了应用的健壮性,因ؓC++包装是强cd的。所以,~译器可在编译时、而不是运行时类型系l违例。相反,不到q行Ӟ不可能检像socket或文件系lI/Oq样的C一UOS API的类型系l违例?br>ACE采用了许多技术来降低或消除额外的性能开销。例如,ACE大量C用C++内联来消除额外的Ҏ调用开销Q这L开销可由OS适配层和C++包装所提供的额外的cd安全和抽象层ơ带来。此外,对于性能要求很高的包装,比如socket和文件I/O的send/recvҎQACE会避免用虚函数?br>六、框?br>ACEq含有一个高U的|络~程框架Q集成ƈ增强了较低层ơ的C++ Wrapper Facade。该框架支持ƈ发分布式服务动态配|进应用。ACE的框枉分包含以下组Ӟ
l    事g多\分离lgQACE Reactor(反应?和ProactorQ前摄器Q是可扩展的面向对象多\分离器,它们分派应用Ҏ的处理器Q以响应多种cd的基于I/O、定时器、信号和同步的事件?br>l    服务初始化组ӞACE AcceptorQ接受器Q和ConnectorQ连接器Q组件分别d和被动的初始化Q务与初始化一旦完成后通信服务所执行的应用特有的d去耦合?br>l    服务配置lgQACE Service ConfiguratorQ服务配|器Q支持应用的配置Q这些应用的服务可在安装时和/或运行时动态装配?br>l    分层的流lgQACE Streamlg化了像用L协议栈这L由分层服务组成的通信软g应用的开发?br>l    ORB适配器组Ӟ通过ORB适配器,ACE可以与单U程和多U程CORBA实现q行无缝集成?br>ACE框架lg便利了通信软g的开发,它们无需修改、重~译、重链接Q或频繁地重启运行中的应用,可被更新和扩展。在ACE中,q样的灵zL是通过l合以下要素来获得的Q(1QC++语言Ҏ,比如模板、承和动态绑定,Q?Q设计模式,比如抽象工厂、策略和服务配置器,以及Q?QOS机制Q比如显式动态链接和多线E?br>七、分布式服务和组?
除了OS适配层、C++ Wrapper Facade和框架组ӞACEq提供了包装成自包含lg的标准分布式服务库。尽这些服务组件ƈ不是ACE框架库的严格l成部分Q它们在ACE中扮演了两种角色Q?br>1.    分解出可复用分布式应用的“积木”:q些服务lg提供通用的分布式应用d的可复用实现Q比如名字服务、事件\由、日志、时间同步和|络锁定?br>2.    演示ACElg的常见用例:q些分布式服务还演示了怎样用像Reactor、Service Configurator、Acceptor和Connector、Active ObjectQ以及IPC包装q样的ACElg来有效地开发灵zR高效和可靠的通信软g?br>八、高U分布式计算中间件组?br>即使用像ACEq样的通信框架Q开发健壮、可扩展和高效的通信应用仍富有挑战性。特别是Q开发者必L握许多复杂的OS和通信的概念,比如Q?br>l    |络d和服务标识?br>l    表示转换Q比如加密、压~和在异U终端系l间的字节序转换?br>l    q程和线E的创徏和同步?br>l    本地和远地进E间通信QIPCQ机制的pȝ调用和库例程?br>通过采用像CORBA、DCOM或Java RMIq样的高U分布式计算中间Ӟ可以降低开发通信应用的复杂性。高U分布式计算中间仉留在客户端和服务器之_可自动完成分布式应用开发的许多ȝ而易错的斚wQ包括:
l    认证、授权和数据安全?br>l    服务定位和绑定?br>l    服务注册和启用?br>l    事g多\分离和分z?br>l    在像TCPq样的面向字节流的通信协议之上实现消息帧?br>l    涉及|络字节序和参数整编QmarshalingQ的表示转换问题?br>为给通信软g的开发者提供这些特性,在ACE中绑定了下面的高U中间g应用Q?br>1.    The ACE ORBQTAOQ:TAO是用ACE提供的框架组件和模式构徏的CORBA实时实现Q包含有|络接口、OS、通信协议和CORBA中间件组件等Ҏ。TAOZ标准的OMG CORBA参考模型,q进行了增强的设计,以克服传l的用于高性能和实时应用的ORB的缺炏VTAO像ACE一P也是可自׃用的开放源码Y件?br>2.    JAWSQJAWS是高性能、自适配的Web服务器,使用ACE提供的框架组件和模式构徏。JAWS被构造成“框架的框架”。JAWS的M框架含有以下lg和框Ӟ事g多\分派器、ƈ发策略、I/O{略、协议管道、协议处理器和缓存虚拟文件系l。每个框枉被构造成一l协作对象,通过l合和扩展ACE中的lg来实现。JAWS也是可自׃用的开放源码Y件?br>九、主?br>ACE的主ؓQ?a >http://www.cs.wustl.edu/~schmidt/ACE.htmlQ在q里可获得最新版本的ACE以及其他相关资源?br>Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q?

|络通信
ACE
参考网站:
C++库的代表Q超重量U的|络通信开发框架。ACE自适配通信环境QAdaptive Communication EnvironmentQ是可以自由使用、开放源代码的面向对象框Ӟ在其中实C许多用于q发通信软g的核心模式。ACE提供了一l丰富的可复用C++包装外观QWrapper FacadeQ和框架lgQ可跨越多种q_完成通用的通信软gdQ其中包括:事g多\分离和事件处理器分派、信号处理、服务初始化、进E间通信、共享内存管理、消息\由、分布式服务动态(重)配置、ƈ发执行和同步Q等{?br>StreamModule
参考网站:

设计用于化编写分布式E序的库。尝试着使得~写处理异步行ؓ的程序更ҎQ而不是用同步的外壛_起异步的本质?br>SimpleSocket
参考网站:
http://home.hetnet.nl/~lcbokkers/simsock.htm
q个cd让编写基于socket的客?服务器程序更加容易?br>A Stream Socket API for C++
参考网站:
又一个对Socket的封装库?

http://blog.donews.com/dgsheng/archive/2006/03/16/771372.aspx

ACE网l编E进行了模式化,以便你不必每ơ都重复相同的代码?

|络~程需要处理的事情多括中断Qƈ发,多线E等Q程序格式相对固定,但是健壮的网l程序则相对复杂。ؓ了处理这些情形,ACE内徏了几个网l编E的模式?

最基本的模式当然是直接使用sockq行单客户单服务器单U程的一对一模型Q这U模式相对简单,也和ACE关系不大Q但是这L写的E序不能处理q发的情况,可用性很差或者说基本不具有可用性?

最单的处理q发但是却用单U程的框架在ACE中称为Reactor框架Q在q种框架下,Reactor扮演了协调员的角Ԍ应用E序~制者需要首先写好各U各L事g处理E序Q然后在Reactor中进行登讎ͼReactor以阻塞的方式同时监视所有可能发生的事gQƈ且在相应的事件发生的时候调用对应的处理q程。这U框架解决了在单U程的前提下解决了ƈ发,但是存在一定的问题Q如果某个事件执行过E过长,则可能导致Reactor漏过某些事g?

另外一U单U程处理q发的模式称为异步I/O的Proactor模式Q这U模式和前面介绍的Reactor模式其实区别不大Q唯一的区别之处在于,Servercd对从|络上收到的消息q行处理的时候,后者ƈ不直接让处理器处理收到的消息Q而是首先消息{换ؓ一个消息块l构(ACE_Message_BlockQ通过this->reader_.read函数)Q然后再让相应的处理函数处理已经接收好的消息块结构?

比较一下Reactor框架和Proactor框架Q前者的执行程是: 监视事g->调用事g处理q程->l箋监视事g?后者的执行程是: 监视事g->产生消息->处理消息->释放消息->l箋监视事g。这两种不同的框架在引入各自的多U程概念以后Q就衍生Z同的多线E框架?

前面说过Q用多U程q行|络~程也有两种框架Q半同步/半异步框架和领导?跟随者框架。前者对应的是Proactor框架Q后者对应的是Reactor框架。所谓半同步或者半异步框架Q执行的程是:ȝE负?监视事g->产生消息->攑օ消息队列->监视事g,工作U程则负责从获取消息->处理消息->从消息队列获取另外一个消息?q种框架的优势在于,׃构造消息ƈ且将其放入消息队列的旉是可以控制的Q因此,可以很好的处理网l峰值的情况Q即使出现很高的峰|也不会造成消息的遗漏,但是׃消息存在一个入队列Q出队列的过E,因此性能相较另外一U模型,理论上更差?

后者则是一U相Ҏ复杂的模型,在线E池中只有一个线E是领导者线E,其他随者线E,领导者线E监视事Ӟ在事情发生的时候,首先L另外一个线E变为领D,然后自己再处理事Ӟ处理完成以后Q首先尝试再ơ成为领D,如果试p|Q另外一个线E已l成为领D)Q则自己变成跟随者?q种模型ZReactor模型Q没有消息队列的概念Q由于不存在出入队列的过E,性能相对前者理Z更好。但是如果存在很高的|络蜂拥Q则可能׃所有的U程都在处理各自的事ӞD没有领导者可用,出现数据丢失的可能?

在这两种多线E模型中都存在线E池的用。在半同?半异步模型中Q工作者线E可能ؓ一个工作者线E池。消息队列的U程同步的工作已l由ACE框架自动完成Q是不是工作者线E越多越好呢Q?{案是否定的?多线E可以提高客L响应速度。比如同时有AQB两个客户端先后发起两个请求,Ah完成的时间较长,Bh则可以很快完成,如果只有一个工作线E,那么B需要等待Ah完成以后才能收到自己的响应,对于A来说Q它本来׃期待自己的请求很快被完成Q实际的执行情况会是QA在期待的旉内收到响应,B则用了A的时间才收到自己的响应,B的客h意度׃很差?如果使用多线E,A会gq一点点收到自己的响应,而B也可以在合理的时间内收到自己的响应?但是׃多线E有自己的开销Q就整个pȝ来说Q单工作U程执行A和B的L间回比多工作U程执行ABd的L间要短?

对于领导?跟随者模型中Q必然存在一个对{的U程池,U程池的数目取决于系l能够承受的数目Q单对于模型本w来_U程池的U程数目大Q能够承受的|络蜂拥的极限g大?但是如果执行每个h的时间都很短Q则pȝ中存在大量永q也用不到的U程Q浪费了pȝ的资源?

如果使用多处理器的系l,应用E序必然能够从多U程Q工作线E和跟随者线E)l构中收?

肥仔 2008-04-18 20:48 发表评论
]]>
ACE与ASIO之间关于Socket~程的比?/title><link>http://www.shnenglu.com/woaidongmao/archive/2008/04/18/47532.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Fri, 18 Apr 2008 12:47:00 GMT</pubDate><guid>http://www.shnenglu.com/woaidongmao/archive/2008/04/18/47532.html</guid><wfw:comment>http://www.shnenglu.com/woaidongmao/comments/47532.html</wfw:comment><comments>http://www.shnenglu.com/woaidongmao/archive/2008/04/18/47532.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/woaidongmao/comments/commentRss/47532.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/woaidongmao/services/trackbacks/47532.html</trackback:ping><description><![CDATA[<p>ACE与ASIO之间关于Socket~程的比?br>转自Q?a >FREE MY SOUL</a><br>ACE是一个很成熟的中间g产品Qؓ自适应通讯环境Q但它过于宏大,一堆的设计模式Q架构是一层又一层,对初学者来_有点困难?br>ASIO是基本Boost开发的异步IO库,装了SocketQ简化基于socketE序的开发?br>最q分析ASIO的源代码Q让我无不惊呀于它设计。在ACE中开发中的内存管理一直让人头痛,ASIO的出玎ͼ让我看到新的曙光Q成为我新的好伙伴。简单地与ACE做个比较?br>1.层次架构Q?br>ACE底层是C风格的OS适配层,上一层基于C++的wrapc,再上一层是一些框ӞAccpetor, ConnectorQReactor{)Q最上一层是框架上服务?br>ASIO与之cMQ底层是OS的适配层,上一层一些模板类Q再上一层模板类的参数化QTCP/UDPQ,再上一层是服务Q它只有一U框架ؓio_service?br>2.涉及范围Q?br>ACE包含了日志,IPCQ线E,׃n内存Q配|服务等?br>ASIO只涉及到SocketQ提供简单的U程操作?br>3.设计模式Q?br>ACE主要应用了ReactorQProactor{?br>而ASIO主要应用了Proactor?br>4.U程调度Q?br>ACE的Reactor是单U程调度QProactor支持多线E调度?br>ASIO支持单线E与多线E调度?br>5.事g分派处理Q?br>ACE主要是注册handlerc,当事件分z时Q调用其handler的虚挂勾函数。实现ACE_Handler/ACE_Svc_Handler/ACE_Event_handler{类的虚函数?br>ASIO是基于函数对象的hanlder事g分派。Q何函数都可能成功hanlderQ少了一堆虚表的l护Q调度上优于ACE?br>6.发布方式Q?br>ACE是开源免费的Q不依赖于第3方库Q?一般应用用它Ӟ以动态链接的方式发布动态库?br>ASIO是开源免费的Q依赖BoostQ应用用时只要include头文Ӟ不需动态库?br>7.可移植性:<br>ACE支持多种q_Q可UL性不存在问题Q据说socket~程在linux下有不少bugs?br>ASIO支持多种q_Q可UL性不存在问题?br>8.开发难度:<br>ZACE开发应用,对程序员要求比较高,要用好它Q必非怺解其框架。在其框架下开发,往往newZ个对象,不知在什么地斚w攑֥?br>ZASIO开发应用,要求E序员熟悉函数对象,函数指针Q熟悉boost库中的boost::bind。内存管理控制方ѝ?br>我个得,如果应用socket~程Q用ASIO开发比较好Q开发效率比较高。ACE适合于理论研IӞ它本来就是源于Douglas的学术研I? <p>posted on 2007-09-21 10:27 <a href="http://www.shnenglu.com/jinq0123/">金庆</a> 阅读(606) <a href="http://www.shnenglu.com/#Post">评论(16)</a> <a href="http://www.shnenglu.com/jinq0123/admin/EditPosts.aspx?postid=32603">~辑</a> <a href="http://www.shnenglu.com/jinq0123/AddToFavorite.aspx?id=32603">收藏</a> <a href="http://www.shnenglu.com/jinq0123/services/trackbacks/32603.aspx">引用</a> 所属分c? <a href="http://www.shnenglu.com/jinq0123/category/5137.html">1. C/C++</a> <p><img height="1" src="http://www.shnenglu.com/jinq0123/aggbug/32603.html?webview=1" width="1"> <p><a name="pagedcomment"></a><a name="评论"> <h5>评论</h5> <p><a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#32645">#</a> <a name="32645"></a>re: ACE与ASIO之间关于Socket~程的比?2007-09-21 23:01 <a href="http://www.shnenglu.com/missdeer/">missdeer</a> <p>发现asio占用CPU很厉宻I而且不知道是不是我用得不对,传输效率q不高。。?nbsp; <a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#post">回复</a> <a href="http://www.shnenglu.com/comment?author=missdeer">更多评论</a><br><a href="http://www.shnenglu.com/"></a><a></a> <p><a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#32655">#</a> <a name="32655"></a>re: ACE与ASIO之间关于Socket~程的比?2007-09-22 10:15 <a href="http://www.shnenglu.com/jinq0123/">金庆</a> <p>@missdeer<br>ACEQasio都没用过。只是用了boost中几个库之后Q对boost有好感。以前的|络~程都是直接用socket。是否选用asioq需要自p察?nbsp; <a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#post">回复</a> <a href="http://www.shnenglu.com/comment?author=%e9%87%91%e5%ba%86">更多评论</a><br><a href="http://www.shnenglu.com/"></a><a></a> <p><a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#32791">#</a> <a name="32791"></a>re: ACE与ASIO之间关于Socket~程的比较[未登录] 2007-09-24 16:16 <a>exile</a> <p>asio本nq不占用多少资源, 如果|络q接C?但占用CPU很厉? 那肯定时是自己写的程序某个地方出了问?  <a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#post">回复</a> <a href="http://www.shnenglu.com/comment?author=exile">更多评论</a><br><a href="http://www.shnenglu.com/"></a><a></a> <p><a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#32814">#</a> <a name="32814"></a>re: ACE与ASIO之间关于Socket~程的比?2007-09-24 23:34 <a href="http://www.shnenglu.com/missdeer/">missdeer</a> <p>@exile<br>我也希望是自己写的代码的问题Q毕竟要选择用一个框架来q行开发,对于一个稳重的目l来说是很大的一个决心。可是我用的试代码是asio自带的例子程序,其它相关的文档提及的也少…?nbsp; <a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#post">回复</a> <a href="http://www.shnenglu.com/comment?author=missdeer">更多评论</a><br><a href="http://www.shnenglu.com/"></a><a></a> <p><a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#32833">#</a> <a name="32833"></a>re: ACE与ASIO之间关于Socket~程的比较[未登录] 2007-09-25 10:56 <a>eXile</a> <p>@missdeer <br>那就应该分析一下测试的环境. 看一下有q接?无连接时, 局域网? 公网? <br>asio本n带的例子是很单的, 都是用法演示,最多也服务器讑֮几个U程. <br>在局域网中进行这L试是没有什么意义的. <br>boost ?thread 和asio都是有可能作为系l支持库q入std::tr2? <br><a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#post">回复</a> <a href="http://www.shnenglu.com/comment?author=eXile">更多评论</a><br><a href="http://www.shnenglu.com/"></a><a></a> <p><a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#33032">#</a> <a name="33032"></a>re: ACE与ASIO之间关于Socket~程的比?2007-09-27 17:05 <a href="http://www.shnenglu.com/jinq0123/">金庆</a> <p>@missdeer<br>我下载了asio 0.3.8准备试试它的例子。不q发现asio不支持VC6。boost其它库都是支持VC6的,而asio只支持VC7.1和VC8?nbsp; <a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#post">回复</a> <a href="http://www.shnenglu.com/comment?author=%e9%87%91%e5%ba%86">更多评论</a><br><a href="http://www.shnenglu.com/"></a><a></a> <p><a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#33057">#</a> <a name="33057"></a>re: ACE与ASIO之间关于Socket~程的比?2007-09-27 21:53 <a href="http://www.shnenglu.com/missdeer/">missdeer</a> <p>@金庆<br>如果要用Boost之类的模板库Q强烈徏议放弃VC6Q改?.1?.0Q无Z~译器对标准的兼容,q是W三方库对编译器的支持上看,7.1都远q好?.0  <a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#post">回复</a> <a href="http://www.shnenglu.com/comment?author=missdeer">更多评论</a><br><a href="http://www.shnenglu.com/"></a><a></a> <p><a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#33073">#</a> <a name="33073"></a>re: ACE与ASIO之间关于Socket~程的比?2007-09-28 09:06 <a href="http://www.shnenglu.com/jinq0123/">金庆</a> <p>@missdeer<br>我想的是攑ּVC。只要我掌握了wxWidgetsQ就可以抛弃MFCQ然后抛弃VC?nbsp; <a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#post">回复</a> <a href="http://www.shnenglu.com/comment?author=%e9%87%91%e5%ba%86">更多评论</a><br><a href="http://www.shnenglu.com/"></a><a></a> <p><a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#33122">#</a> <a name="33122"></a>re: ACE与ASIO之间关于Socket~程的比?2007-09-28 20:36 <a>BlueEngine</a> <p>问个问题Q看上了wxWidgets的i18nQ如何利用它来实现现有MFCE序的国际化Q各位朋友请l个?nbsp; <a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#post">回复</a> <a href="http://www.shnenglu.com/comment?author=BlueEngine">更多评论</a><br><a href="http://www.shnenglu.com/"></a><a></a> <p><a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#33177">#</a> <a name="33177"></a>re: ACE与ASIO之间关于Socket~程的比?2007-09-29 09:28 <a href="http://www.shnenglu.com/jinq0123/">金庆</a> <p>@BlueEngine<br>以前做过MFC两套资源来实Cpa版本。如是只是两个语aQ就没必要用i18n。当然如果会用wxWidgets的i18nQ或者用q,可能选它是正的选择?nbsp; <a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#post">回复</a> <a href="http://www.shnenglu.com/comment?author=%e9%87%91%e5%ba%86">更多评论</a><br><a href="http://www.shnenglu.com/"></a><a></a> <p><a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#39044">#</a> <a name="39044"></a>re: ACE与ASIO之间关于Socket~程的比?2007-12-19 15:37 <a href="http://www.shnenglu.com/jinq0123/">金庆</a> <p>@missdeer<br>不知占用CPU很厉害的原因扑ֈ没有Q我试了asio的几个例子,都还不错。只要理解了Proactor模式Q用上应该是相当方便的?nbsp; <a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#post">回复</a> <a href="http://www.shnenglu.com/comment?author=%e9%87%91%e5%ba%86">更多评论</a><br><a href="http://www.shnenglu.com/"></a><a></a> <p><a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#39073">#</a> <a name="39073"></a>re: ACE与ASIO之间关于Socket~程的比较[未登录] 2007-12-19 21:30 <a>missdeer</a> <p>q_数据量传输是看不出什么,但如果数据量一大,很明显了,你可以试试它的一个http client例子Q让它下载一?M大小的文Ӟ不管你的|络环境如何Q都会很占CPU?nbsp; <a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#post">回复</a> <a href="http://www.shnenglu.com/comment?author=missdeer">更多评论</a><br><a href="http://www.shnenglu.com/"></a><a></a> <p><a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#39122">#</a> <a name="39122"></a>re: ACE与ASIO之间关于Socket~程的比?2007-12-20 15:23 <a href="http://www.shnenglu.com/ly4cn/">沐枫</a> <p>从版本号也能看出来。asio目前只有0.3.9Q还q未到开发完整?br>因此Q成熟自然也q未到?nbsp; <a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#post">回复</a> <a href="http://www.shnenglu.com/comment?author=%e6%b2%90%e6%9e%ab">更多评论</a><br><a href="http://www.shnenglu.com/"></a><a></a> <p><a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#39134">#</a> <a name="39134"></a>re: ACE与ASIO之间关于Socket~程的比?2007-12-20 17:11 <a href="http://www.shnenglu.com/jinq0123/">金庆</a> <p>了一下,实是这栗对于内|传输CPU占满了,对外|(|速很低)没有明显的CPU占用。与|络环境无关吗?如果是低量时占CPUQ那肯定是有问题。数据流量大Ӟ可以解释为接收数据太忙,不过也是不正常(相比其它下蝲工具Q?nbsp; <a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#post">回复</a> <a href="http://www.shnenglu.com/comment?author=%e9%87%91%e5%ba%86">更多评论</a><br><a href="http://www.shnenglu.com/"></a><a></a> <p><a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#42123">#</a> <a name="42123"></a>re: ACE与ASIO之间关于Socket~程的比?2008-01-29 15:08 <a>lunny</a> <p>asio有两个版本,一个依赖于boost的,来会加入boot库,同时也会发布一个独立的Qƈ不一定非要用依赖于boost的那个版本?nbsp; <a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#post">回复</a> <a href="http://www.shnenglu.com/comment?author=lunny">更多评论</a><br><a href="http://www.shnenglu.com/"></a><a></a> <p><a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#46593">#</a> <a name="46593"></a>re: ACE与ASIO之间关于Socket~程的比?a name="Post"></a> 2008-04-09 11:14 <a>fafa</a> <p>@lunny<br>依赖于boost那个版本比较好编译嘛  <a href="http://www.shnenglu.com/jinq0123/archive/2008/04/09/32603.html#post">回复</a> <a href="http://www.shnenglu.com/comment?author=fafa">更多评论</a> <p></a><img src ="http://www.shnenglu.com/woaidongmao/aggbug/47532.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/woaidongmao/" target="_blank">肥仔</a> 2008-04-18 20:47 <a href="http://www.shnenglu.com/woaidongmao/archive/2008/04/18/47532.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ACE高效PROACTOR~程框架一ClientHandlehttp://www.shnenglu.com/woaidongmao/archive/2008/04/18/47533.html肥仔肥仔Fri, 18 Apr 2008 12:47:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2008/04/18/47533.htmlhttp://www.shnenglu.com/woaidongmao/comments/47533.htmlhttp://www.shnenglu.com/woaidongmao/archive/2008/04/18/47533.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/47533.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/47533.html

2008-04-02 23:24

1、WIN32下面用proactor可以辑ֈ几乎RAW IOCP的效率,׃装关系Q应该是差那么一炏V?

客户端处理类的常规写法:
//处理客户端连接消?br>class ClientHandler : public ACE_Service_Handler
{
public:
/**构造函?br>*
*
*/
ClientHandler(unsigned int client_recv_buf_size=SERVER_CLIENT_RECEIVE_BUF_SIZE)
   :_read_msg_block(client_recv_buf_size),_io_count(0)
{
}

~ClientHandler(){}

/**
*初始化,因ؓ可能要用到ClientHandler内存池,而这个池又不一定要用NEW
*/
void init();

/**清理函数Q因为可能要用到内存?br>*
*/
void fini();

//查是否超时的函数

void check_time_out(time_t cur_time);

public:

/**客户端连接服务器成功后调?br>*
* \param handle 套接字句?br>* \param &message_block W一ơ读到的数据Q未用)
*/

//由Acceptor来调用!Q!
virtual void open (ACE_HANDLE handle,ACE_Message_Block &message_block);

/**处理|络L作结束消?br>*
* \param &result L作结?br>*/
virtual void handle_read_stream (const ACE_Asynch_Read_Stream::Result &result);

/**处理|络写操作结束消?br>*
* \param &result 写操作结?br>*/
virtual void handle_write_stream (const ACE_Asynch_Write_Stream::Result &result);

private:

//**生成一个网l读h
*
* \param void
* \return 0-成功Q?1p|
*/
int initiate_read_stream (void);

/**生成一个写h
*
* \param mb 待发送的数据
* \param nBytes 待发送数据大?br>* \return 0Q成功,Q?p|
*/
int initiate_write_stream (ACE_Message_Block & mb, size_t nBytes );
/**
*
* \return 查是否可以删除,用的是一个引用计数。每一个外出IO的时候+1Q每一个IO成功后-1
*/
int check_destroy();
//异步?br>ACE_Asynch_Read_Stream _rs;

//异步?br>ACE_Asynch_Write_Stream _ws;

//接收~冲区只要一个就够了Q因为压根就没想q要多读Q我直到现在也不是很清楚Z么要多读Q多ȝ话要考虑很多问题
ACE_Message_Block _read_msg_block;

//套接字句?q个可以不要了,因ؓ基类有个HANDLER在里面的?br>//ACE_HANDLE _handle;

//一个锁Q客L反正有东东要锁的Q注意,要用ACE_Recursive_Thread_Mutex而不是用ACE_Thread_MutexQ这里面是可以重入的Q而且在WIN32下是直接的EnterCriticalSectionQ可以达到很高的效率
ACE_Recursive_Thread_Mutex _lock;
//在外IO数量,其实是引用计数啦,没啥的。ؓ0的时候就把这个东东关掉啦?br>long _io_count;

//查超时用的,q段旉没东东就CLOSE他了?

time_t _last_net_io;

private:

//本来想用另外一U模型的Q只?个或?个外Q后来想惻I反正一般内存都是够的Q就不管了?

//ACE_Message_Block _send_msg_blocks[2];

//ACE_Message_Block &_sending_msg_block;

//ACE_Message_Block &_idle_msg_block;

private:
public:
//TODO:move to prriva and use friend class!!!

//只是Z效率更高Q不用STL的LIST是因为到现在我没有可用的Node_AllocatorQ所以效率上会有问题?br>ClientHandler *_next;

ClientHandler *next(){return _next;}

void next(ClientHandler *obj){_next=obj;}

};

//q是具体实现Q有些地Ҏ较ؕQ懒得管了,锁的有些地方不对。懒得改了,反正在出错或者有瓉的时候再做也不迟?

void ClientHandler::handle_read_stream (const ACE_Asynch_Read_Stream::Result &result)
{
_last_net_io=ACE_OS::time(NULL);
int byterecved=result.bytes_transferred ();
if ( (result.success ()) && (byterecved != 0))
{
   //ACE_DEBUG ((LM_DEBUG, "Receiver completed:%d\n",byterecved));

//处理完数?br>   if(handle_received_data()==true)
   {
    //ACE_DEBUG ((LM_DEBUG, "go on reading...\n"));

//把东东推到头部,处理_包
    _read_msg_block.crunch();
    initiate_read_stream();
   }
}

//q个地方不想用ACE_Atom_opQ因为反正要有一个锁Q而且一般都会用锁,不管了。假如不在意的话Q应该直接用ACE_Atom_Op以达到最好的效率

{
   ACE_Guard<ACE_Recursive_Thread_Mutex> locker (_lock);
   _io_count--;
}
check_destroy ();
}

void ClientHandler::init()
{

//初始化数据,q不在构造函数里做?br>_last_net_io=ACE_OS::time(NULL);
_read_msg_block.rd_ptr(_read_msg_block.base());
_read_msg_block.wr_ptr(_read_msg_block.base());
this->handle(ACE_INVALID_HANDLE);
}

bool ClientHandler::handle_received_data()
{

...........自己处理
return true;
}

//==================================================================
void ClientHandler::handle_write_stream (const ACE_Asynch_Write_Stream::Result &result)
{
//发送成功,RELEASE?br>//q个不可能有多个RELEASEQ直接XX?br>//result.message_block ().release ();
MsgBlockManager::get_instance().release_msg_block(&result.message_block());

{
   ACE_Guard<ACE_Recursive_Thread_Mutex> locker (_lock);
   _io_count--;
}
check_destroy ();
}

//bool ClientHandler::destroy ()
//{
// FUNC_ENTER;
// ClientManager::get_instance().release_client_handle(this);
// FUNC_LEAVE;
// return false ;
//}

int ClientHandler::initiate_read_stream (void)
{
ACE_Guard<ACE_Recursive_Thread_Mutex> locker (_lock);

//考虑到粘包的呀
if (_rs.read (_read_msg_block, _read_msg_block.space()) == -1)
{
   ACE_ERROR_RETURN ((LM_ERROR,"%p\n","ACE_Asynch_Read_Stream::read"),-1);
}
_io_count++;
return 0;
}

/**生成一个写h
*
* \param mb 待发送的数据
* \param nBytes 待发送数据大?br>* \return 0Q成功,Q?p|
*/
int ClientHandler::initiate_write_stream (ACE_Message_Block & mb, size_t nBytes )
{
ACE_Guard<ACE_Recursive_Thread_Mutex> locker (_lock);
if (_ws.write (mb , nBytes ) == -1)
{
   mb.release ();
   ACE_ERROR_RETURN((LM_ERROR,"%p\n","ACE_Asynch_Write_File::write"),-1);
}
_io_count++;
return 0;
}

void ClientHandler::open (ACE_HANDLE handle,ACE_Message_Block &message_block)
{
//FUNC_ENTER;
_last_net_io=ACE_OS::time(NULL);
_io_count=0;
if(_ws.open(*this,this->handle())==-1)
{
   ACE_ERROR ((LM_ERROR,"%p\n","ACE_Asynch_Write_Stream::open"));
}
else if (_rs.open (*this, this->handle()) == -1)
{
   ACE_ERROR ((LM_ERROR,"%p\n","ACE_Asynch_Read_Stream::open"));
}
else
{
   initiate_read_stream ();
}

check_destroy();
//FUNC_LEAVE;
}

void ClientHandler::fini()
{
}

void ClientHandler::check_time_out(time_t cur_time)
{
//ACE_Guard<ACE_Recursive_Thread_Mutex> locker (_lock);
//ACE_DEBUG((LM_DEBUG,"cur_time is %u,last io is %u\n",cur_time,_last_net_io));

//是否已lؓ0?br>if(this->handle()==ACE_INVALID_HANDLE)
   return;
if(cur_time-_last_net_io>CLIENT_TIME_OUT_SECONDS)
{
   ACE_OS::shutdown(this->handle(),SD_BOTH);
   ACE_OS::closesocket(this->handle());
   this->handle(ACE_INVALID_HANDLE);
}
}

int ClientHandler::check_destroy()
{
{
   ACE_Guard<ACE_Recursive_Thread_Mutex> locker (_lock);
   if (_io_count> 0)
    return 1;
}
ACE_OS::shutdown(this->handle(),SD_BOTH);
ACE_OS::closesocket(this->handle());
this->handle(ACE_INVALID_HANDLE);

//q个地方l内存池吧?br>ClientManager::get_instance().release_client_handle(this);
//delete this;
return 0;
}



肥仔 2008-04-18 20:47 发表评论
]]>
Windows 发邮件的Ҏhttp://www.shnenglu.com/woaidongmao/archive/2008/04/16/47323.html肥仔肥仔Wed, 16 Apr 2008 13:25:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2008/04/16/47323.htmlhttp://www.shnenglu.com/woaidongmao/comments/47323.htmlhttp://www.shnenglu.com/woaidongmao/archive/2008/04/16/47323.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/47323.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/47323.htmlSMTP协议Q?a >MIME协议

INFOQ?MAPI 是不适用?HTML 邮g

扩展邮g应用~程接口 (MAPI) 应该不是用于生成 HTML 格式的邮件?作ؓ备用Ҏ, 考虑使用 Microsoft Outlook 对象模型?CDONTS?CDOSYSQ?CDOEX 或第三方 SMTP 控g?

回到端

更多信息

MAPI 1.0 写入 HTML 邮g开发ƈ不可靠支持创?HTML 格式邮g之前?MAPI 1.0 是由所有版本的 MicrosoftExchange 版本 5.5 通过支持版本 (和所?ServicePackQ?q包括以下从属技术:

?br>?MAPI

?br>扩展 MAPI

?br>OLE 消息

?br>zd消息 Q协作数据对?(CDO) 1.1Q?

?br>CDO 1.21 1.2 和版?

?br>MAPI 控g (Msmapi32.ocx)

如果邮g?HTML 格式, 需要如用于发送其他语a, 中文字其他技术提供更可靠支持?HTML 邮gQ?

?/font>

JMail

?br>CDONTS

?br>CDO for Windows 2000 (CDOSYS)

?br>CDO for Exchange 2000 (CDOEX)

?br>Outlook 对象模型?Microsoft Outlook 98 或更高版?/font>

?br>从第三方供应商获取支?SMTP - ActiveX 控g

回到端

Outlook 如何生成Z MAPI ?HTML 邮g
除ؓ通过 HTMLBody 属性公开什么接口, Outlook 用来生成和?HTML 格式邮g是不公开外部?Outlook ?HTML 数据存储作ؓҎ~码 RTF ?PR_RTF_COMPRESSED MAPI 属性中?有Q何公共接口用于生成?d, 或操作此复杂作?HTML 数据?PR _ BODY 包含邮g正文的纯文本转换?
PR_BODY_HTML ?Q?/h6>如果 PR_STORE_SUPPORT_MASK 属性中存储q回 STORE_HTML_OK Ҏ文档 PR_BODY_HTML, 上此属性仅支持由邮件存储?没有 Microsoft 邮g存储支持此标志?某些W三方存储提供程序可能选择支持此标记和属性?

肥仔 2008-04-16 21:25 发表评论
]]> Ʒ99þþƷ| þþƷƷ| þþþavר| þþһ| ϼþùƷӰԺ| þþҹƷ| ޾Ʒһþ| þþûɫƬ| þùƷվ| þer99ȾƷһ| ŷ龫Ʒþþþþ| þ99Ʒþ| þĻ˿| һŷƬþ| 51þҹɫƷ| ɫۺϾþۺۺ | þþþþAv뾫Ʒר | ŷ˾þô߽ۺ69| 69þҹɫƷ69| Ʒٸavþ| þɫۺһ| þɫ| þþƷ޾Ʒ| һþ㽶߿ۿ| avԾþþþa鶹 | þþþavۺϲҰ| ëƬþþþþùëƬ| þþ91Ʒһ| þ޾Ʒ| ޼VëƬþþƷ| þҹɫƷ| 99ƷѾþþþþ| þۺϾþ| һaɫƬþ| þﶼǾƷ| ޷AVþò | 99þùѸ| Ʒþþþþ| þùһ| һŷƬþ| ޾Ʒþþþ|