從Java Socket非阻塞到Netty入門流程

Java IO,Socket非阻塞通信流程

這里我們使用一個(gè)內(nèi)嵌的永久循環(huán),來(lái)讓Socket成為一個(gè)非阻塞的通信流程。


如上圖所示,ServerSocket是我們自建的一個(gè)類,通過(guò)啟動(dòng)線程,且線程內(nèi)置一個(gè)真循環(huán),防止accept阻塞;

在客戶端監(jiān)聽(tīng)類上,將監(jiān)聽(tīng)到的socket作為參數(shù),傳遞到客戶端監(jiān)聽(tīng)類上,并再次啟動(dòng)線程,獲取一個(gè)InputStream,同時(shí)再次在這個(gè)剛剛啟動(dòng)線程內(nèi)置一個(gè)真循環(huán),為的是不斷獲取信息并回寫(xiě)

這里要注意的是,第一個(gè)真循環(huán)是保證獲取新連接不會(huì)阻塞,第二個(gè)真循環(huán)是保證不停的獲取客戶端信息并回寫(xiě);

關(guān)于客戶端則通過(guò)端口和IP,啟動(dòng)線程,通過(guò)一個(gè)循環(huán)不停的向服務(wù)端寫(xiě)數(shù)據(jù);

Netty入門

基于上面的圖,我們也可以學(xué)習(xí)Netty相關(guān)的基礎(chǔ)入門。


NioEventLoop(事件循環(huán))

1、新連接接入

2、連接上的數(shù)據(jù)讀取

Channel(抽象連接)

Socket、SocektChannel(IO\NIO)抽象

ChannelHandler(業(yè)務(wù)邏輯處理)

讀寫(xiě)數(shù)據(jù)期間的業(yè)務(wù)層

PipeLine(動(dòng)態(tài)鏈處理)

多個(gè)ChannelHandler組成,讓消息可以層層處理

ByteBuf(數(shù)據(jù)接收)

基本的數(shù)據(jù)處理基于ByteBu

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容