`
anders0913
  • 浏览: 90688 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

阅读更多
ACE与ASIO之间关于Socket编程的比较

转自:FREE MY SOUL

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

最近分析ASIO的源代码,让我无不惊呀于它设计。在ACE中开发中的内存管理一直让人头痛,ASIO的出现,让我看到新的曙光,成为我新的好伙伴。简单地与ACE做个比较。

1.层次架构:
ACE底层是C风格的OS适配层,上一层基于C++的wrap类,再上一层是一些框架(Accpetor, Connector,Reactor等),最上一层是框架上服务。
ASIO与之类似,底层是OS的适配层,上一层一些模板类,再上一层模板类的参数化(TCP/UDP),再上一层是服务,它只有一种框架为io_service。

2.涉及范围:
ACE包含了日志,IPC,线程,共享内存,配置服务等。
ASIO只涉及到Socket,提供简单的线程操作。

3.设计模式:
ACE主要应用了Reactor,Proactor等。
而ASIO主要应用了Proactor。

4.线程调度:
ACE的Reactor是单线程调度,Proactor支持多线程调度。
ASIO支持单线程与多线程调度。

5.事件分派处理:
ACE主要是注册handler类,当事件分派时,调用其handler的虚挂勾函数。实现ACE_Handler/ACE_Svc_Handler/ACE_Event_handler等类的虚函数。
ASIO是基于函数对象的hanlder事件分派。任何函数都可能成为hanlder,少了一堆虚表的维护,调度上优于ACE。

6.发布方式:
ACE是开源免费的,不依赖于第3方库, 一般应用使用它时,以动态链接的方式发布动态库。
ASIO是开源免费的,依赖Boost,应用使用时只要include头文件,不需动态库。

7.可移植性:
ACE支持多种平台,可移植性不存在问题,据说socket编程在linux下有不少bugs。
ASIO支持多种平台,可移植性不存在问题。

8.开发难度:
基于ACE开发应用,对程序员要求比较高,要用好它,必须非常了解其框架。在其框架下开发,往往new出一个对象,不知在什么地方释放好。
基于ASIO开发应用,要求程序员熟悉函数对象,函数指针,熟悉boost库中的boost::bind。内存管理控制方便。


我个人觉得,如果应用socket编程,使用ASIO开发比较好,开发效率比较高。ACE适合于理论研究,它本来就是源于Douglas的学术研究。

;-)



分享到:
评论

相关推荐

    socketDemo

    Socket编程涉及的知识点广泛,包括网络基础、TCP/IP协议栈、错误处理、并发编程、数据编码与解码等。在实际开发中,还需要考虑安全性、性能优化、连接管理等问题。熟练掌握Socket编程能够帮助开发者构建高效、灵活的...

    vc++socket 通讯demo

    在VC++中,Socket编程主要用于实现网络通信,它允许应用程序通过Internet或局域网发送和接收数据。在本文中,我们将深入探讨如何在VC++环境中使用Socket进行TCP通信,包括服务器端和客户端的编程步骤。 首先,让...

    vc socket tcp 多线程客户端--服务器结构的例子.visual c++

    同时,由于是“原始”套接字示例,可能没有使用更高级的抽象层,如Boost.Asio或ACE,而是直接操作底层的Winsock API。 总之,理解并掌握TCP套接字编程对于任何希望在C++环境中构建网络应用的开发者来说都是必不可少...

    WINDOWS网络编程技术_源码

    除了底层的API调用,还有一些高级的网络编程框架,如ACE、Boost.Asio等,它们封装了底层细节,提供了更抽象、更易用的编程接口。 10. **网络协议解析** 源码中可能包含对HTTP、FTP、SMTP等应用层协议的解析实现,...

    Visual.C++.网络通信编程实用案例精选 光盘源码

    9. **网络库的使用**:除了使用Winsock API,还可以借助开源库如ACE、Boost.Asio或Poco.NET简化网络编程。这些库提供了高级抽象,能够更便捷地处理复杂的网络任务。 10. **并发模型**:了解不同的并发模型,如...

    WINSOCK-UDP.rar_Socket 定时_UDP timer_socket每隔

    - 使用第三方库,如Boost.Asio或ACE,它们提供了高级的定时器接口。 - 也可以使用线程和条件变量结合,线程休眠一段时间后唤醒发送消息。 “每隔一段时间自动发送消息”可以通过上述定时器机制实现。设定一个周期性...

    Windows网络编程(上中下全套).zip

    高级主题可能涵盖网络编程中的其他重要概念,如HTTP/HTTPS协议、FTP协议的实现、网络流媒体、P2P网络、网络编程框架(如ACE、Boost.Asio)的使用,以及Windows特定的服务如Windows消息队列(MSMQ)在分布式网络通信...

    C++网络编程

    6. **并发模型**:除了多线程,C++还有其他并发模型,如异步IO(AIO)、事件驱动编程(如使用Boost.Asio库),以及现代C++的并发工具如future和async。 7. **网络库的使用**:在实际开发中,常常会使用到如Poco、...

    C++网络编程案例

    9. **网络编程框架**:除了基础的套接字编程,还有一些成熟的网络编程框架如Poco、ACE、libevent等,它们封装了底层细节,提供了更高级别的抽象,简化了网络应用的开发。 通过《Visual C++网络通信编程实用案例精选...

    Visual c++ 网络编程 郑阿奇

    10. 网络编程框架:除了基础的Winsock和MFC,还有一些高级网络编程框架,如ACE、Boost.Asio等,它们提供了更高级别的抽象和功能,简化了复杂网络应用的开发。 在提供的"VC++网络编程源代码-1.rar"中,我们可以找到...

    visual c++网络编程

    在Visual C++中进行网络编程,主要是利用Winsock API或者更高层的库如ACE、Boost.Asio等。下面将详细阐述相关知识点: 1. **Winsock API**:这是Windows平台上的套接字接口,用于实现TCP/IP协议族的网络通信。在...

    多端口服务器多个客户端相互聊天.zip

    综上所述,"多端口服务器多个客户端相互聊天"项目涉及到了C++网络编程的多个核心概念,包括socket编程、并发处理、数据传输与解码、错误处理和用户界面设计。理解并实现这样的系统有助于提升对网络编程和并发控制的...

    《Visual C++网络通信编程实用案例精选》配套源码

    10. **网络编程框架**:可能使用了ACE、Poco、Boost.Asio等网络编程框架,简化了底层的网络API调用,提高了代码的可读性和可维护性。 通过学习和分析这份源码,开发者不仅可以掌握Visual C++进行网络通信的基础,还...

    Visual C++网络通信编程实用案例精选 源码

    12. **网络编程库**:了解其他第三方库,如ACE、Boost.Asio等,它们提供了更高级别的抽象,简化了网络编程。 13. **调试技巧**:使用Wireshark等工具抓包分析,或者使用Visual Studio的调试器跟踪网络相关的问题。 ...

    Windows网络编程

    在实际应用中,开发者可能会使用更高层次的库,如ACE、Boost.Asio或Microsoft的Windows Communication Foundation(WCF),这些库提供了更抽象的接口和更强大的功能,简化了网络编程的复杂性。 了解并熟练掌握...

    Visual+C++网络程序设计实例详解所有源代码

    通过这本书,读者可以学习到如何构建基于C++的网络应用,涵盖从基础的socket编程到复杂的多线程网络应用。源代码是学习过程中不可或缺的部分,它能帮助读者理解理论知识并进行实践操作。 在提供的文件名称列表中,...

    Visual C++ 网络资料

    7. 网络库封装:虽然Winsock提供了底层的网络功能,但实际开发中,通常会使用更高级别的网络库进行封装,如ACE、Boost.Asio等。这些库提供了更抽象的接口,简化了网络编程的复杂性,并且具有跨平台的优势。 8. 网络...

    vc++聊天室源代码

    在VC++中,通常会用到WSA(Windows Socket API)或者更高级的库如ACE、asio等进行网络编程。我们需要关注如何建立连接、发送和接收数据,以及处理多用户并发通信。 3. **多线程技术**:为了实现同时处理多个用户的...

Global site tag (gtag.js) - Google Analytics