攜手共進——《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
。
如果大家還有什麼不明白,可以在下面留言、
相關文章
- 為Linux初學者答疑解惑Linux
- 攜手共進 互利互贏 | 老男孩教育攜手NGINX ATC,共創NGINX行業新生態Nginx行業
- 360集團與中孚資訊達成戰略合作,攜手共進共創網安未來!
- 合作創新,攜手共贏!共築堅實數字底座!
- 捷報頻傳 | 博睿資料簽約華潤集團,攜手共進共創共贏
- 易念“八週年” 同心共鑄安全 攜手奮進未來
- 對話布本智慧CEO,為你的人生答疑解惑
- netty實戰之一 認識nettyNetty
- 大佬答疑解惑丨進行Web自動化測試,為什麼總是定位不到元素?Web
- Springboot 整合 Netty 實戰Spring BootNetty
- 五年攜手共話,FISCO BCOS為數實相生注入新動能
- netty實戰之二 helloNettyNetty
- 雙11,HCIE-DC+新版RHCE強強聯合,為您答疑解惑!
- 網路應用扛把子Netty!騰訊高工手寫“Netty速成手冊”,3天帶你走向實戰Netty
- 軟體測試實戰專案,問題答疑
- 鴻翼&深信服:攜手共創資料巨集圖
- 強強聯合 攜手共贏| 綠盟科技與達夢公司達成戰略合作
- 攜手共贏 HashData亮相華為合作伙伴大會
- 《Netty實戰》-學習筆記1Netty筆記
- 聚力打造四個“高地”,攜手合作夥伴共鑄國雲
- Coremail郵件安全全球渠道招募,2022與您攜手共贏REMAI
- 英特爾攜手釘釘共創未來辦公之“雲”態
- 阿拉訂線上線下互聯 攜手共創美好世界
- Netty In Action中文版 - 第二章:第一個Netty程式Netty
- javascript:私有變數 (靜態私有變數為什麼會被所以例項共享?-答疑解惑)JavaScript變數
- 眾人拾柴火焰高 昇騰攜手夥伴共築AI新高地AI
- 阿科瑪攜手浙江大學,共助氫能儲運發展
- 基於Netty自己動手實現Web框架NettyWeb框架
- 金融行業如何應對線上欺詐?騰訊安全天御團隊線上答疑解惑行業
- iOS實戰公開課視訊 Swift語法答疑第七期iOSSwift
- 2021雲棲大會,博睿資料攜手阿里雲共拓雲原生“可觀測”最佳實踐阿里
- 華為雲亮相LEAP科技展,攜手沙特共創智慧新高度
- 因地制宜,攜手共贏 | 亞太地區遊戲發行商洞察遊戲
- 《率土之濱》手遊攜手雲音樂 顏人中姬霄合璧共頌家國情
- Netty高階應用及聊天室實戰Netty
- DeepMind攜手暴雪發戰帖:週五直播AI打星際II,釋出研究新進展AI
- 2018最新HTML5實戰 共33節HTML
- 解惑
- this解惑