这个示例将用ACE Proactor来实现echo server
代码量差不多只有完成端口的1/3
ACE Reactor的实现
http://www.cppblog.com/sandy/archive/2006/02/17/3308.html
完成端口的实现
http://www.cppblog.com/sandy/archive/2007/06/06/25670.html
当然如果你理解了完成端口,ACE Proactor就很简单了
大概的过程是这个样子的
1.使用ACE_Asynch_Acceptor来建立服务器端的socket,然后bind,listen等待Accept并创建IOCP
(相对于ACE Reactor的ACE_Acceptor)
2.当出现完成事件(GetQueuedCompletionStatus)返回时,调用用户的处理接口来处理,这是一个派生于ACE_Service_Handler的子类
(相对于ACE Reactor的ACE_Svc_Handler)
ACE Reactor和Proactor最大的不同就是
ACE Reactor在处理读写事件的时候,要使用peer().recv/send来接收/发送数据。
而ACE Proactor在处理读写事件的时候,数据已经被读到用户的缓冲区了,典型的"先斩后奏"
ACE Proactor比ACE Reactor麻烦的地方是需要手工去投递异步读写的请求。
可以通过下面的代码来去体会。
转自:http://www.cppblog.com/sandy/archive/2007/06/19/26633.html