Netplus里的基本概念
生活随笔
收集整理的這篇文章主要介紹了
Netplus里的基本概念
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?
本文為初見,Netplus快速開始之PingPong Example系列第三篇
1. netp::ref_ptr & netp::ref_base
C++是一門面向對象的語言,一切皆可為對象,然對象的創(chuàng)建與銷毀,指針的傳遞、共享,在稍大一點的工程里面,如豆腐雕花,如履薄冰,一不小心,直接崩壞,尤其是引入多線性以及異步編程之后,更是令人心力交瘁,這種動不動就出王炸的逆天脾氣,常使得開發(fā)者談C色變。
那么對象的管理,到底有沒有好一點的辦法呢,netplus選擇了ref_ptr&ref_base, 顧名思義,這是一種基于引用計數(shù)的對象管理機制,因篇幅關系,這里暫時只講如何使用它。
- 在Netplus里面,絕大部分的class都繼承于ref_base,ref_base作為根,提供引用計數(shù)的基本功能。
- 繼承自ref_base的class,直接new/delete 的時候,編譯器會報錯。
- 繼承netp::ref_base的class,需要配合模板netp::ref_ptr<T>進行使用。
- netp::ref_ptr<T>對象,只能通過netp::make_ref<T> 進行創(chuàng)建,不需要的時候,需賦值為nullptr。
- 每賦值給一次,引用計數(shù)增1,每被置nullptr一次,引用計數(shù)減1,當減到0的時候,其指向的內(nèi)存將被回收,賦值是線程安全的。
- netp::ref_ptr<T>可以如指針 T* 一樣用來訪問其指向的對象。
- sizeof(netp::ref_ptr<T>) == sizeof(T*)。
- 更詳細的知識,請參:
Netplus 之 Smart Pointer?github.com
- 下面是一個關于 ref_ptr&ref_base 的example
是不是覺得,c++的對象管理也可以很自然,很簡單,很符合直覺。^_^
2. Packet
- Packet是Netplus的一個重要Class, 繼承自netp::ref_base,它提供用于讀寫bytes buffer的接口,是我們用來操作bytes buffer的工具。
- 網(wǎng)絡編程中,當處理Bytes Buffer,特別是處理protocol時,我們需要讀或修改頭部,或直接往頭部前面添加一些數(shù)據(jù)。Packet被專門設計成應對這種場景,它既可以往buffer的左邊寫,也可以在buffer末端往前寫,于是,處理起來將變得極為方便。
- Channel將收到的bytes, 存儲在Packet對象里面,然后再將此對象傳遞給它的第一個Handler。
- 往遠端寫bytes的時候,我們也是將bytes存儲于一個Packet對象,然后最終傳遞給Channel。
- Example:
3. Channel
- Channel是網(wǎng)絡通信的主體,它即是當前的連接,它也是最終與操作系統(tǒng)進行交互,讀寫bytes,以及socket狀態(tài)管理的實體。
- 每一個Channel可以添加一個多個Channel Handler,Channel Handler以單向鏈表的形式鏈接在一起,當與Channel相關的事件發(fā)生的時候,Channel負責將事件傳遞給第一個Channel Handler。
- 一個典型的channel read事件,按下面順序在Handler中傳遞
- 一個典型的channel write事件,按下面順序在Handler中傳遞
- 每一個handler在創(chuàng)建的時候都會包含一個tail handler, 一個head handler,用于處理缺省行為
4. Channel Handler
- Channel Handler是具體處理我們的消息的地方,處理完消息后,我們可以繼續(xù)傳遞一個消息給下一個Handler,或直接終止當前消息的邏輯處理,甚至接關閉當前的Channel。
- Channel Handler需要繼承 netp::channelhandler_abstract, 實現(xiàn)相應接口,用于處理網(wǎng)絡事件,消息。
- 更多細節(jié),請參:
Netplus 之 Concepts?
?
- 在我們的例子中,我們將用到如下Channel handler接口
?
下文我們聊一下在Netplus里面,實現(xiàn)一個服務器,客戶端的基本流程
?
寫代碼的冰冰
?
總結
以上是生活随笔為你收集整理的Netplus里的基本概念的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: server是什么意思
- 下一篇: Android:H5 通过 URL Sc