攜手共進——《NettyINACTION》中文版《Netty實戰》答疑解惑
引子
所謂一千個人的眼中,就會有一千個哈姆雷特,每位讀者對於一本書中的意境的理解都是不一樣的,當然這也包括技術類書籍。可是對於技術書籍來說,最重要的就是準確性,這種準確性是要求100%的,不能說“千人千面”。作為書籍的作者和譯者,自然在表達的時候可能有所紕漏,不能做到面面俱到,所以也就有了這篇小文,用來收集以及解答譯者收到的讀者的一些反饋和疑問,希望能夠幫助到大家。
共進
- 書中說的每一個
Channel
都具有唯一的id是什麼意思呢,如果返回相同的hashCode
就會報錯?
解惑:書中對於這一塊兒的描述其實不是特別的詳細,只是給出了結論,但是並沒有給出為何。首先id
的意思是identity
,即唯一標識,類似於我們的身份證。那麼為何Channel
的唯一標識必須是唯一的呢?這是因為一個網路連線(這裡不指面向連線、或者無連線的協議)總是由一個(SourceIP,SourcePORT,TargetIP,targetPORT )
唯一確定的,這個四元組是不會重複的吧,這裡排除(IP和埠)複用的情況。所以這就是為何設計成每個Channel
的id都是唯一確定的。具體的可以檢視io.netty.channel.AbstractChannel#compareTo
的程式碼。那麼有什麼時候報錯呢,如上面的程式碼,即呼叫compareTo
的時候。一個很常見的場景便是通過呼叫ChannelGroup
的add(Channel)
方法,將一個Channel
新增到ChannelGroup
時,其中ChannelGroup
的內部使用了由ConcurrentHasmMap
實現的ConcurrentHashSet
,說到這裡,讀者應該明白了吧,因為後面的邏輯,compareTo
的呼叫已經是HashMap
的邏輯了。
- 書中說的當一個
Channel
被標記為@Shareable
的時候才可以被同時新增到多個ChannelPipeline
中,否則的話就會報錯,這是為何呢?
解惑:書中並沒有提到原始碼層面是如何實現的,實際上,在 Netty 目前基於 EventLoop
的執行緒模型中,Netty 是要求使用者的ChannelHandler
的實現必須要是執行緒安全的。這樣,其便可以在不同的Channel
的ChannelPipeline
中安全的共享。所以,設計上為了避免非執行緒安全的ChannelHandler
被錯誤地共享,所以 Netty 要求你標註一個ChannelHandler
為@Shareable
來指示它的執行緒安全性。在內部,每一個ChannelHandler
都有一個isAdded
欄位,這個欄位在ChannelPipeline
的add/set*(ChannelHandler)
被呼叫的時候將會讀取。原始碼見:io.netty.channel.ChannelHandlerAdapter#added
和io.netty.channel.DefaultChannelPipeline#checkMultiplicity
。
如果大家還有什麼不明白,可以在下面留言、
相關文章
- OO和SQL,應該攜手共進SQL
- 攜手共進 互利互贏 | 老男孩教育攜手NGINX ATC,共創NGINX行業新生態Nginx行業
- Windows 98 答疑解惑(轉)Windows
- 為Linux初學者答疑解惑Linux
- 捷報頻傳 | 博睿資料簽約華潤集團,攜手共進共創共贏
- MySQL · 答疑解惑 · 物理備份死鎖分析MySql
- 對話布本智慧CEO,為你的人生答疑解惑
- MySQL · 答疑解惑 · 備庫Seconds_Behind_Master計算MySqlAST
- 鴻翼&深信服:攜手共創資料巨集圖
- netty實戰之一 認識nettyNetty
- 大佬答疑解惑丨進行Web自動化測試,為什麼總是定位不到元素?Web
- Android逆向新手答疑解惑篇——JNI與動態註冊Android
- 網路應用扛把子Netty!騰訊高工手寫“Netty速成手冊”,3天帶你走向實戰Netty
- 軟體測試實戰專案,問題答疑
- netty實戰-netty client連線池設計Nettyclient
- 【Mysql】MySQL · 答疑解惑 · MySQL 最佳化器 range 的代價計算MySql
- Springboot 整合 Netty 實戰Spring BootNetty
- netty實戰之二 helloNettyNetty
- 因地制宜,攜手共贏 | 亞太地區遊戲發行商洞察遊戲
- 共創開源攜海龍電腦城將正版進行到底(轉)
- CentOS加入RedHat 攜手推進開源革新CentOSRedhat
- 眾人拾柴火焰高 昇騰攜手夥伴共築AI新高地AI
- 華為雲亮相LEAP科技展,攜手沙特共創智慧新高度
- 《Netty實戰》-學習筆記1Netty筆記
- Coremail郵件安全全球渠道招募,2022與您攜手共贏REMAI
- 資訊分享 | 華為雲攜手圖撲軟體共話行業新發展行業
- TUV南德攜手香港德國商會,共話物聯網網路安全
- 金融行業如何應對線上欺詐?騰訊安全天御團隊線上答疑解惑行業
- 天翼雲攜手華為,強強聯合,共創資料儲存新生態
- DeepMind攜手暴雪發戰帖:週五直播AI打星際II,釋出研究新進展AI
- Netty4實戰 - 編解碼技術Netty
- Netty In Action中文版 - 第二章:第一個Netty程式Netty
- 黑芝麻智慧攜手均聯智行,深度共創自動駕駛域控智慧方案自動駕駛
- 技術認證 | 圖撲軟體攜手華為雲再創合作共贏新局面
- 華為雲釋出15大創新服務 攜手夥伴及開發者共創新價值
- 加速創新,攜手共贏新時代|優炫資料庫百城巡展首站告捷資料庫
- iOS實戰公開課視訊 Swift語法答疑第七期iOSSwift
- 基於Netty自己動手實現Web框架NettyWeb框架