這次代碼閱讀主要來自boost Asio開發團隊 的C++11 標準範例。 範例連結
我會對我自己閱讀的部份加上註釋,並從中學習函數的意義及使用方式。
希望能給一同在學習路上的大家一些幫助。
如果對boost環境建置或使用方式不熟悉的夥伴,別急,我會在之後補上教學。
先來介紹一下異步網路通信庫Asio;以下短篇介紹來自英文維基。 來源連結
Asio 是一個自由免費的C++開源網路編程庫,它讓開發者可以輕鬆地的使用現代C++設計方式來達成異步網路通信的功能。
同時,在2005年十月被收入至boost 成為boost.Asio,boost.Asio在2006年時已經將專案送至C++標準委員會,將來很有可能成為C++標準的一份子。
/*如果有使用Winodows API進行網路編程經驗的朋友接觸到這類庫之後會發現到他的方便程度會讓你感動得哭出來,我想Unix like開發者應該也一樣 */
實際上,聊天室軟體開發如果不考慮Windows底下的比較多樣化的5種socket i/o模式,大致上的維持一對多或多對多連線
可以分為異步及多執行緒兩種技術。
如果想先大致了解這異步跟多線程的兩種區別,我覺得這個stack overflow的討論串回答很不錯,值得參考。參考連結
就目前個人所理解的部分,async與多線程主要的差別部分在於節省了線程上下文切換所造成的運算下能差異,但是不代表異步
一定是單一主線程且不會block。
就知乎上所找到相對於同步的解釋
同步,就是在發出一個*調用*時,在沒有得到結果之前,該*調用*就不返回。但是一旦調用返回,就得到返回值了。
換句話說,就是由*調用者*主動等待這個*調用*的結果。
而異步則是相反,*調用*在發出之後,這個調用就直接返回了,所以沒有返回結果。換句話說,當一個異步過程調用發出後,調用者不會立刻得到結果。而是在*調用*發出後,*被調用者*通過狀態、通知來通知調用者,或通過回調函數處理這個調用。
作者:嚴肅
鏈接:https://www.zhihu.com/question/19732473/answer/20851256
就之後在更進一步學習後,我會把我所認為釐清的觀念,在筆記出一篇文章出來。
好,進入主題。
那知道Asio這個網路庫可以快速開發網路通信程式之後,接下來該怎麼做呢?,當然是閱讀範例代碼學習了!
來看一下本次範例編譯成果。
server端,能夠異步收發來自使用者端的信息。
client1 連上本機服務器端口,並發送訊息。
client2 連上本機服務器端口,連上時同時收到存放在server queue裡的client1訊息。