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的学术研究。
;-)
分享到:
相关推荐
Socket编程涉及的知识点广泛,包括网络基础、TCP/IP协议栈、错误处理、并发编程、数据编码与解码等。在实际开发中,还需要考虑安全性、性能优化、连接管理等问题。熟练掌握Socket编程能够帮助开发者构建高效、灵活的...
在VC++中,Socket编程主要用于实现网络通信,它允许应用程序通过Internet或局域网发送和接收数据。在本文中,我们将深入探讨如何在VC++环境中使用Socket进行TCP通信,包括服务器端和客户端的编程步骤。 首先,让...
同时,由于是“原始”套接字示例,可能没有使用更高级的抽象层,如Boost.Asio或ACE,而是直接操作底层的Winsock API。 总之,理解并掌握TCP套接字编程对于任何希望在C++环境中构建网络应用的开发者来说都是必不可少...
除了底层的API调用,还有一些高级的网络编程框架,如ACE、Boost.Asio等,它们封装了底层细节,提供了更抽象、更易用的编程接口。 10. **网络协议解析** 源码中可能包含对HTTP、FTP、SMTP等应用层协议的解析实现,...
9. **网络库的使用**:除了使用Winsock API,还可以借助开源库如ACE、Boost.Asio或Poco.NET简化网络编程。这些库提供了高级抽象,能够更便捷地处理复杂的网络任务。 10. **并发模型**:了解不同的并发模型,如...
- 使用第三方库,如Boost.Asio或ACE,它们提供了高级的定时器接口。 - 也可以使用线程和条件变量结合,线程休眠一段时间后唤醒发送消息。 “每隔一段时间自动发送消息”可以通过上述定时器机制实现。设定一个周期性...
高级主题可能涵盖网络编程中的其他重要概念,如HTTP/HTTPS协议、FTP协议的实现、网络流媒体、P2P网络、网络编程框架(如ACE、Boost.Asio)的使用,以及Windows特定的服务如Windows消息队列(MSMQ)在分布式网络通信...
6. **并发模型**:除了多线程,C++还有其他并发模型,如异步IO(AIO)、事件驱动编程(如使用Boost.Asio库),以及现代C++的并发工具如future和async。 7. **网络库的使用**:在实际开发中,常常会使用到如Poco、...
9. **网络编程框架**:除了基础的套接字编程,还有一些成熟的网络编程框架如Poco、ACE、libevent等,它们封装了底层细节,提供了更高级别的抽象,简化了网络应用的开发。 通过《Visual C++网络通信编程实用案例精选...
10. 网络编程框架:除了基础的Winsock和MFC,还有一些高级网络编程框架,如ACE、Boost.Asio等,它们提供了更高级别的抽象和功能,简化了复杂网络应用的开发。 在提供的"VC++网络编程源代码-1.rar"中,我们可以找到...
在Visual C++中进行网络编程,主要是利用Winsock API或者更高层的库如ACE、Boost.Asio等。下面将详细阐述相关知识点: 1. **Winsock API**:这是Windows平台上的套接字接口,用于实现TCP/IP协议族的网络通信。在...
综上所述,"多端口服务器多个客户端相互聊天"项目涉及到了C++网络编程的多个核心概念,包括socket编程、并发处理、数据传输与解码、错误处理和用户界面设计。理解并实现这样的系统有助于提升对网络编程和并发控制的...
10. **网络编程框架**:可能使用了ACE、Poco、Boost.Asio等网络编程框架,简化了底层的网络API调用,提高了代码的可读性和可维护性。 通过学习和分析这份源码,开发者不仅可以掌握Visual C++进行网络通信的基础,还...
12. **网络编程库**:了解其他第三方库,如ACE、Boost.Asio等,它们提供了更高级别的抽象,简化了网络编程。 13. **调试技巧**:使用Wireshark等工具抓包分析,或者使用Visual Studio的调试器跟踪网络相关的问题。 ...
在实际应用中,开发者可能会使用更高层次的库,如ACE、Boost.Asio或Microsoft的Windows Communication Foundation(WCF),这些库提供了更抽象的接口和更强大的功能,简化了网络编程的复杂性。 了解并熟练掌握...
通过这本书,读者可以学习到如何构建基于C++的网络应用,涵盖从基础的socket编程到复杂的多线程网络应用。源代码是学习过程中不可或缺的部分,它能帮助读者理解理论知识并进行实践操作。 在提供的文件名称列表中,...
7. 网络库封装:虽然Winsock提供了底层的网络功能,但实际开发中,通常会使用更高级别的网络库进行封装,如ACE、Boost.Asio等。这些库提供了更抽象的接口,简化了网络编程的复杂性,并且具有跨平台的优势。 8. 网络...
在VC++中,通常会用到WSA(Windows Socket API)或者更高级的库如ACE、asio等进行网络编程。我们需要关注如何建立连接、发送和接收数据,以及处理多用户并发通信。 3. **多线程技术**:为了实现同时处理多个用户的...