攜手共進——《Netty IN ACTION》中文版《Netty實戰》答疑解惑

      網友投稿 720 2022-05-29

      攜手共進——《Netty IN ACTION》中文版《Netty實戰》答疑解惑

      引子

      共進

      書中說的每一個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的邏輯了。

      書中說的當一個ChannelHandler被標記為@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。

      本文轉載自異步社區。

      軟件開發 編程語言 網絡 軟件開發 Web應用防火墻 WAF

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:【Java】【并發編程】詳解并發三大特性
      下一篇:加大生態投入,華為云發布四大生態策略
      相關文章
      亚洲AV色香蕉一区二区| 久久精品国产亚洲沈樵| 亚洲ⅴ国产v天堂a无码二区| 成人午夜亚洲精品无码网站| 亚洲精品黄色视频在线观看免费资源| 在线观看亚洲电影| 日韩欧美亚洲国产精品字幕久久久| 亚洲日本一线产区和二线产区对比| 亚洲精品中文字幕无乱码麻豆| 亚洲精品电影天堂网| 亚洲国产成人久久综合一区| 亚洲天堂一区在线| 久久亚洲精品国产精品婷婷| 色婷五月综激情亚洲综合| 国产亚洲精品影视在线| 国产色在线|亚洲| 亚洲影院天堂中文av色| 亚洲国产综合精品中文第一| 亚洲欧洲精品成人久久曰| 亚洲精品一卡2卡3卡四卡乱码| 亚洲av无码日韩av无码网站冲 | 一区二区三区亚洲| 噜噜噜亚洲色成人网站∨ | 精品国产亚洲男女在线线电影 | 最新亚洲人成无码网站| 亚洲精品国产精品国自产观看| 亚洲一区视频在线播放| 亚洲精品狼友在线播放| 亚洲va在线va天堂va888www| 亚洲尹人九九大色香蕉网站| 亚洲大片免费观看| 亚洲精品V天堂中文字幕| 深夜国产福利99亚洲视频| 亚洲一级特黄大片无码毛片 | 亚洲AV无码精品国产成人| 亚洲福利在线播放| 亚洲女久久久噜噜噜熟女| 亚洲福利视频一区| 亚洲乱码一二三四区麻豆| 亚洲成a人片在线不卡一二三区| 亚洲AV无码专区日韩|