智慧 + 毅力 = 无所不能

正确性、健壮性、可靠性、效率、易用性、可读性、可复用性、兼容性、可移植性...

导航

ACE介绍及简单服务器实例

Posted on 2010-06-13 16:27  Bill Yuan  阅读(6241)  评论(0编辑  收藏  举报

ACE的全名是 ADAPTIVE Communication Environment,是一组可以自由使用的、开源的面向对象(OO)的、跨平台的网络通信构架。

框架供网络程序的开发:

l      事件多路分离组件:ACE Reactor(反应堆)和Proactor(前摄器)是可扩展的面向对象多路分离器,它们分派应用特有的处理器,以响应多种类型的基于I/O、定时器、信号和同步的事件。

l      服务初始化组件:ACE Acceptor(接受器)和Connector(连接器)组件分别使主动和被动的初始化任务与初始化一旦完成后通信服务所执行的应用特有的任务去耦合。

l      进程和线程管理:提供多进程和多线程的派生和管理方法,消除了平台的差异性。

l      服务配置组件:ACE Service Configurator(服务配置器)支持应用的配置,这些应用的服务可在安装时和/或运行时动态装配。

l      分层的流组件:ACE Stream组件简化了像用户级协议栈这样的由分层服务组成的通信软件应用的开发。

l      命名服务:ACE NamingService提供了单进程命名上下文、同一节点共享命名上下文和在网络上命名上下文的服务设施。

除此以外,ACE还提供了信号、线程安全与同步、内存管理等等多种丰富的功能。ACE已经成长成为一个完善的系统,在网络编程方面,能够提供非常丰富的服务。

下面是个ACE核心代码,构建了一个服务器

代码
int main(int, char *[])
{
ACE_INET_Addr port_to_listen (
9999);

ACE_SOCK_Acceptor acceptor;

acceptor.open (port_to_listen,
1);

while (1)
{
ACE_SOCK_Stream peer;

ACE_INET_Addr peer_addr;

ACE_Time_Value timeout (
10, 0);

if( 0 == acceptor.accept (peer, &peer_addr, &timeout, 0))
{
char buffer[4096];
ssize_t bytes_received;

while ((bytes_received = peer.recv (buffer, sizeof(buffer))) != -1)
{
peer.send_n (buffer, bytes_received);
}
peer.close ();
}
}
return 0;
}