netty获取玩家chanel_Netty中的Channel
在JDK中就有Channel的概念了. 數據的讀寫都要通過Channel進行. 既然Netty是封裝了JDK, 同樣它也有自己的Channel. 一個是服務端Chanel(NioServerSocketChannel),另一個是客戶端Channel(NioSocketChannel).
NioServerSocketChannel負責監聽客戶端的Accpet事件,當發生此事件時.那么它什么時候?或者在哪里知道有Accept事件呢?在之前的文章中我們知道,每一個Channel都和一個NioEventLoop關聯,NioServerSocketChannel也和一個NioEventLoop關聯.而NioEventLoop封裝了一個IO Thread,由這個線程去監聽Accept事件.
NioEventLoop主要由三個過程構成. 創建-啟動-執行. 執行的環節是個無限循環.當IO Thread監聽到有Accept事件后, 會調用JDK底層accept()方法獲取到這個連接, 然后再封裝成Netty自己的NioSocketChannel.這個就是對應的客戶端Channel.
每一個Channel都與一個Pipeline關聯, 在創建Channel的時候也會創建出來一個與之關聯的Pipeline. Pipeline通過鏈表的方式將用戶自定義的處理器Handler放在Pipeline中, 當Channel中有數據時, 就會由關聯的Pipeline進行處理, 更具體說, 是由里面的每個Handler進行處理.
NioServerSocketChannel關聯的Pipeline有一個默認的Handler,即ServerBootstrapAcceptor.它也是一個Handler.
pipeline.addLast(new ServerBootstrapAcceptor(ch, currentChildGroup, currentChildHandler, currentChildOptions, currentChildAttrs));
從名字中我們可以看出來,它和接收客戶端連接有關.沒錯, 上面我們也說了, 當客戶端NioSocketChannel被創建出來之后, 還沒有結束, 因為單單的創建出來NioSocketChannel并沒有多少卵用. 后續流程就會交給這個ServerBootstrapAcceptor進行處理.那么它又處理什么呢?主要包括初始化NioSocketChannel,以及將其注冊到NioEventLoop,而這個NioEventLoop肯定和NioServerSocketChannel關聯的那個NioEventLoop不是同一個.
NioSocketChannel負責數據的讀寫.
總結
以上是生活随笔為你收集整理的netty获取玩家chanel_Netty中的Channel的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1500辆国产特斯拉Model 3抵达澳
- 下一篇: 瑞卡贷上征信吗