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