Boost.Asio C++ 網(wǎng)絡(luò)編程之一:什么是Boost.Asio?
簡(jiǎn)單來(lái)說(shuō),Boost.Asio是一個(gè)跨平臺(tái)的、主要用于網(wǎng)絡(luò)和其他一些底層輸入/輸出編程的C++庫(kù)。
? ? ? ?關(guān)于網(wǎng)絡(luò)處理已經(jīng)有很多解決方案,但是Boost.Asio是目前為止最優(yōu)的方案。它在2005年就被包含進(jìn)Boost,然后被大量Boost的用戶測(cè)試并使用在許多項(xiàng)目中,比如:Remobo,可以讓你創(chuàng)建你自己的即時(shí)私有網(wǎng)絡(luò)(IPN);libtorrent,一個(gè)用于實(shí)現(xiàn)比特流客戶端的庫(kù);PokerTH ,一個(gè)支持LAN和互聯(lián)網(wǎng)對(duì)戰(zhàn)的紙牌游戲。
? ? ? ?Boost.Asio在網(wǎng)絡(luò)通信、COM串行端口和文件上成功地抽象了輸入輸出的概念。你可以基于這些進(jìn)行同步或者異步的輸入輸出編程。
read(stream,?buffer?[,?extra?options]) async_read(stream,?buffer?[,?extra?options],?handler) write(stream,?buffer?[,?extra?options]) async_write(stream,?buffer?[,?extra?options],?handler)
? ? ? ?從前面的代碼片段可以看出,這些函數(shù)支持傳入包含任意內(nèi)容(我們能進(jìn)行讀寫(xiě)的不僅僅是socket)的流實(shí)例。作為一個(gè)跨平臺(tái)的庫(kù),Boost.Asio可以在大多數(shù)操作系統(tǒng)上使用。能同時(shí)支持?jǐn)?shù)千個(gè)并發(fā)的連接。其網(wǎng)絡(luò)部分的靈感來(lái)源于伯克利軟件分發(fā)(BSD)socket,它提供了一套可以支持傳輸控制協(xié)議(TCP)socket、用戶數(shù)據(jù)報(bào)協(xié)議(UDP)socket和Internet控制消息協(xié)議(IMCP)socket的API,而且如果有需要,你可以對(duì)其進(jìn)行擴(kuò)展以支持自己的協(xié)議。
依賴
Boost.Asio依賴于如下的庫(kù):
Boost.System:這個(gè)庫(kù)為Boost庫(kù)提供操作系統(tǒng)支持
Boost.Regex:使用這個(gè)庫(kù)(可選的)以便你重載read_until()或者async_read_until()時(shí)使用boost::regex參數(shù)。
Boost.DateTime:這個(gè)庫(kù)(可選的)為Boost.Asio中的計(jì)時(shí)器功能提供支持。
OpenSSL:這個(gè)庫(kù)(可選的)為Boost.Asio中的SSL功能提供支持。
重要的宏
如果設(shè)置了BOOST_ASIO_DISABLE_THREADS,不管你是否在編譯Boost的過(guò)程中加入了線程支持,Boost.Asio中的線程支持都會(huì)失效。