ACE Socket Wrapper Facade

原创 2007年09月21日 13:36:00

如果你用C++以bind、listen、accept做了很长时间的网络应用开发,看到ACE的对socket的封装,你一定被它深深吸引,除非你是一个严格流程化的人,从来没有在bing、listen、accept的过程中碰到过任何苦恼。

接触ACE很长一段时间后也没有用心的去思考它,直到细致的看了一遍ACE的这个facade,我觉得我有必要研究一下ACE这个老新朋友了。

1.ACE_INET_Addr

我得承认,熟悉了ACE这套东西,我甚至都不愿意去想SOCKADDR那套东西,强制类型转换和太多的细节让我止步。从功能上来说,ACE_INET_Addr替代了SOCKADDR。

ACE_Addr是ACE里各种地址的基类,子类有ACE_INET_Addr和ACE_FILE_Addr以及其他几个地址类。具体可参看ACE在线文档。

2.ACE_SOCK

c里边的sock可以接受数据,也可以监听,还可以是连接,在统一程序中不同的sock只得以变量名区别,任何一次失误都会造成问题,而编译器不能帮你任何事情。ACE依照功能对sock进行了封装,这样编译器可以对误用的sock在编译阶段给于检查。

ACE_SOCK继承于ACE_IPC_SAP,根据功能,ACE_SOCK_Acceptor、ACE_SOCK_IO继承于ACE_SOCK,而ACE_SOCK_IO又有ACE_SOCK_Stream的继承。而ACE_SOCK_Connector和其他几个类的关系比较小。

一切都和以前网络编程一样,只是使用这些少了很多烦琐的事情。一个简单的使用ACE的服务可能是这样的:

    ACE::init();
    ACE_INET_Addr    addr(
2350);
    ACE_SOCK_Acceptor    sock;
    ACE_SOCK_Stream        msg;
    sock.open(addr);
    
while (true)
    
...{
        sock.accept(msg);
        
static    const    char    kmsg[]    = "you were kickout";
        msg.send(kmsg,
sizeof(kmsg));
        msg.close();
    }

    ACE::fini();

 请注意这里的init和finit,对于ACE新手而言,看了一大堆东西写一个可以成功的应用程序可能对信心有极大的提升作用,可是很少有人告诉你这对函数,如果没有它们,这成了对信心的一次巨大打击,你的程序无法正确运行,而你未得到任何错误提示。

init和finit宛如以前我们使用的wsastartup和wsacleanup一样,你不需要对init和finit了解太多,记得引入它们帮你初始化就可以了。对于新手而言,我敢保证,这是你的第一个ace程序无法正确运行的极大杀手。

设计模式C++实现:包装器外观模式(Wrapper Facade)

包装器外观模式(Wrapper Facade)把现有的非面向对象的API所提供的函数和数据,封装在更加简洁的、健壮的、可移植的、可维护的和内聚的面向对象的类接口中。 一般通过两种方式实现跨平台: ...

POSA2:Wrapper Facade模式

意图 用更加简洁、健壮、可移植、可维护和内聚的面向对象接口,封装已存在的非面向对象API的函数和相关数据。 背景 使用已存在的非面向对象的API提供的服务或机制,开发可维护和进化的应...

Boost.Asio,libevent和ACE之间关于Socket编程的比较(★firecat推荐★)

文章来源:http://blog.163.com/miky_sun/blog/static/3369405201041753652505/ ACE是一个很成熟的中间件产品,为自适应通讯环境,但它过...

ACE学习笔记一(基本的TCP/IP Socket用法)

1.基本的概念 连接器(Connector):主动建立连接ACE_SOCK_Connector 接收器(acceptor):被动建立连接ACE_SOCK_Acceptor 流(Stream):传...

【兴趣爱好】之:Boost.Asio和ACE之间关于Socket编程的比较

ACE是一个很成熟的中间件产品,为自适应通讯环境,但它过于宏大,一堆的设计模式,架构是一层又一层,对初学者来说,有点困难。  ASIO是基本Boost开发的异步IO库,封装了Socket,简化基于s...

[原创]一点一滴学习网络游戏开发,第一章节:初步了解ACE和SOCKET

要说起Ace框架,它的跨平台性,效率还有开发的便捷使我选择Ace框架作为服务器端的首选。当然对于我坚持以C++为主的人来说,我就减少了学习和熟悉Java语言和类库。Java中有非常多适合做服务器端的开...

ACE与ASIO之间关于Socket编程的比较

ACE是一个很成熟的中间件产品,为自适应通讯环境,但它过于宏大,一堆的设计模式,架构是一层又一层,对初学者来说,有点困难。 ASIO是基本Boost开发的异步IO库,封装了Socket,简化基于so...
  • educast
  • educast
  • 2013年07月11日 13:46
  • 501

ACE的Socket网络编程

针对Socket API不直接支持“主动连接”模式,ACE将“连接管理”所涉及的三个角色:主动连接角色(active connection role)被动连接角色(passive connnectio...

Boost.Asio和ACE之间关于Socket编程的比较

Boost.Asio和ACE之间关于Socket编程的比较 ACE是一个很成熟的中间件产品,为自适应通讯环境,但它过于宏大,一堆的设计模式,架构是一层又一层,对初学者来说,有点困...

Boost.Asio和ACE之间关于Socket编程的比较

ACE是一个很成熟的中间件产品,为自适应通讯环境,但它过于宏大,一堆的设计模式,架构是一层又一层,对初学者来说,有点困难。  ASIO是基本Boost开发的异步IO库,封装了Socket,简化基于s...
  • educast
  • educast
  • 2014年03月19日 14:12
  • 602
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ACE Socket Wrapper Facade
举报原因:
原因补充:

(最多只允许输入30个字)