官术网_书友最值得收藏!

2.3.2 NIO服務端序列圖

NIO服務端通信序列圖如圖2-10所示。

圖2-10 NIO服務端通信序列圖

下面,我們對NIO服務端的主要創建過程進行講解和說明,作為NIO的基礎入門,我們將忽略掉一些在生產環境中部署所需要的一些特性和功能。

步驟一:打開ServerSocketChannel,用于監聽客戶端的連接,它是所有客戶端連接的父管道,代碼示例如下。

步驟二:綁定監聽端口,設置連接為非阻塞模式,示例代碼如下。

步驟三:創建Reactor線程,創建多路復用器并啟動線程,代碼如下。

步驟四:將ServerSocketChannel注冊到Reactor線程的多路復用器Selector上,監聽ACCEPT事件,代碼如下。

步驟五:多路復用器在線程run方法的無限循環體內輪詢準備就緒的Key,代碼如下。

步驟六:多路復用器監聽到有新的客戶端接入,處理新的接入請求,完成TCP三次握手,建立物理鏈路,代碼示例如下。

步驟七:設置客戶端鏈路為非阻塞模式,示例代碼如下。

步驟八:將新接入的客戶端連接注冊到Reactor線程的多路復用器上,監聽讀操作,用來讀取客戶端發送的網絡消息,代碼如下。

步驟九:異步讀取客戶端請求消息到緩沖區,示例代碼如下。

步驟十:對ByteBuffer進行編解碼,如果有半包消息指針reset,繼續讀取后續的報文,將解碼成功的消息封裝成Task,投遞到業務線程池中,進行業務邏輯編排,示例代碼如下。

步驟十一:將POJO對象encode成ByteBuffer,調用SocketChannel的異步write接口,將消息異步發送給客戶端,示例代碼如下。

注意:如果發送區TCP緩沖區滿,會導致寫半包,此時,需要注冊監聽寫操作位,循環寫,直到整包消息寫入TCP緩沖區,此處不贅述,后續Netty源碼分析章節會詳細分析Netty的處理策略。

當我們了解創建NIO服務端的基本步驟之后,下面我們將前面的時間服務器程序通過NIO重寫一遍,讓大家能夠學習到完整版的NIO服務端創建。

主站蜘蛛池模板: 石城县| 洛宁县| 闵行区| 洪泽县| 浙江省| 灵丘县| 黎城县| 万荣县| 濮阳市| 嘉兴市| 沂水县| 如皋市| 汾阳市| 邯郸市| 林芝县| 赤壁市| 齐河县| 太保市| 武城县| 论坛| 安塞县| 丹巴县| 常州市| 紫阳县| 连江县| 广宗县| 兴宁市| 汤原县| 平塘县| 巴楚县| 苍梧县| 旅游| 调兵山市| 广南县| 卢湾区| 崇义县| 盐亭县| 海林市| 凤山县| 伊吾县| 调兵山市|