前言编程
源码以前,了无秘密。
——侯捷网络
Boost库是一个可移植、提供源代码的C++库,做为标准库的后备,是C++标准化进程的开发引擎之一。Boost库由C++标准委员会库工做组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,是彻彻底底的“准”标准库。架构
boost.asio是Boost库中很是著名的I/O组件,是用于网络和低层IO编程的跨平台C++库,为开发者提供了C++环境下稳定的异步模型。其在性能、移植性、扩展性等方面均为人称道,甚至被不少业内人士称为“网络神器”。asio是目前惟一有但愿进入C++标准库以弥补标准库在网络方面的缺失的C++网络库,所以对asio的学习在某种意义上能够说是学习C++网络编程的必修课。
当前网络上从用户角度介绍asio的文献不少也很完善,因此本文决定另辟蹊径,从asio源码角度出发,由内而外、深刻浅出地剖析asio的架构和设计理念,将asio的一切秘密呈如今读者眼前。异步
本文适合已有较完善的C++基础知识、具有必定程度的泛型技术和面向对象技术、并对boost.asio有必定的了解的读者。性能
首先,本文先从面向对象的角度对asio的架构开始剖析,由粗至细。先让读者对asio有一个高屋建瓴的认识,再逐步细化,最终透彻地了解asio的架构。
而后,本文以Windows平台下的Tcp协议为例,以跟踪流程的方式探究asio的运做原理。(若是做者时间充足或有读者愿意共享,后续会给出其余平台下的流程)
再次,本文从泛型编程的角度对asio的架构作进一步剖析。在此,读者将会看到asio中的各个泛型组件、泛型约束/概念(concepts)、扩展方向与方法、以及泛型技术与面向对象技术的完美结合。
最后,本文从用户的角度分析asio的优缺点,再分享一个基于asio封装的开源网络库<asioex>,力求扬长避短、充分发挥asio的强大威力。学习