前言編程
源碼以前,了無祕密。
——侯捷網絡
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的強大威力。學習