成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Netty 編程看上去懵懵的...

開發(fā) 前端
本文只是介紹了 Java NIO 在 Netty 中的體現(xiàn)、Netty 對(duì) Java NIO 的封裝,讓大家更方便的理解 Netty,并不涉及 Netty 的高效、強(qiáng)大的設(shè)計(jì)之處,下文將會(huì)對(duì)此進(jìn)行介紹。

前言

上篇文章《聽說96.5%的程序員都沒用過Netty》主要涵蓋了 Netty 的入門知識(shí),包括 Netty 的發(fā)展歷程、核心功能與組件,并且通過實(shí)例演示了如何使用 Netty 構(gòu)建一個(gè) HTTP 服務(wù)器。由于 Netty 的抽象程度較高,因此理解起來可能會(huì)比較復(fù)雜,所以本文通過對(duì)比 Java NIO API 和 Netty 的示例代碼,并結(jié)合Netty源碼進(jìn)行深入剖析,從而更好的理解Netty的工作原理。

Java NIO 網(wǎng)絡(luò)編程流程

首先,我們知道 Netty 是基于 Java NIO API 封裝擴(kuò)展的一個(gè)網(wǎng)絡(luò)編程框架,所以二者的網(wǎng)絡(luò)編程工作流程是大差不差的。

(所以在深入了解Netty之前,建議先對(duì)Java NIO有一定的了解)

下圖是基于Java NIO API進(jìn)行網(wǎng)絡(luò)編程時(shí)的工作流程。涉及到的Selector、Channel、Buffer這幾個(gè)組件,《Java NIO是New IO還是Non-blocking IO》中有詳細(xì)說明。

Java NIO 工作原理Java NIO 工作原理

Netty 編碼 VS  Java NIO API 編碼

Netty 同樣會(huì)用到這些核心組件,只不過再一次抽象封裝后,不能直觀的看到這些組件。

先看下基于Java NIO API編程是怎么編寫代碼的。

Java NIO代碼示例Java NIO代碼示例

可以看到, ServerSocketChannel 注冊(cè)到 Selector 并監(jiān)聽連接事件,當(dāng) Selector 接收到連接的客戶端 Channel 后,又監(jiān)聽 Channel 的讀寫事件,那么下次 Selector 就會(huì)接收到客戶端的讀寫事件并進(jìn)行處理。

再看一下基于Netty構(gòu)建的HTTP服務(wù)器示例。

Netty 編程Netty 編程

能看到的就只有一個(gè)對(duì)客戶端讀請(qǐng)求處理的 channelRead0 函數(shù),Selector、ServerSocketChannel這些都沒看到。

那么 ServerSocketChannel 、Selector 在哪里?事件是什么時(shí)候注冊(cè)的?我們扒開褲子看個(gè)究竟。

Netty 對(duì) Java NIO API 的封裝

接下來,看一下Netty是怎么對(duì)Java NIO API進(jìn)行封裝的。

ServerSocketChannel 在 Netty 中的體現(xiàn)

關(guān)于 ServerSocketChannel 的創(chuàng)建,直接找綁定端口的方法,如下圖

圖片圖片

在  NioServerSocketChannel 類中可以看到 newChannel() 函數(shù)創(chuàng)建了 ServerSocketChannel 。

Selector 在 Netty 中的體現(xiàn)

看了上文《聽說96.5%的程序員都沒用過Netty》,可以知道 EventLoop 負(fù)責(zé)處理各種事件,所以可以盲猜一下,Selector 應(yīng)該是在 NioEventLoopGroup 中創(chuàng)建的

圖片圖片

果不其然,在 NioEventLoopGroup 的構(gòu)造方法中調(diào)用 JDK 的 SelectorProvider 創(chuàng)建了Selector,也就是 Java NIO 的代碼。

事件注冊(cè)在 Netty 中的體現(xiàn)

ServerSocketChannel 在創(chuàng)建后為其分配了一個(gè) EventLoop 并開啟新的線程(這也是Netty 多線程異步的體現(xiàn)),最終在 doRegister() 調(diào)用了JDK 的接口注冊(cè)了Selector 并監(jiān)聽了事件,看見 selectionKey 應(yīng)該什么都清楚了吧。

圖片圖片

事件處理在 Netty 中的體現(xiàn)

既然 ServerSocketChannel 注冊(cè)了Selector 并監(jiān)聽了事件,那接下來就是 EventLoop  對(duì)事件的處理了。直接看 NioEventLoop 中的代碼,因?yàn)樗峭ㄟ^新的線程啟動(dòng)的,所以直接看 run()

圖片圖片

processSelectedKeysPlain() 中的代碼熟悉吧,Selector 監(jiān)聽到了某個(gè)事件進(jìn)行處理。下面是對(duì)讀事件的處理

圖片圖片

圖中 ChannelPipeline 采用了責(zé)任鏈模式,是對(duì)事件的處理通道,會(huì)對(duì)聲明時(shí)的ChannelPipeline依次執(zhí)行,也就是圖[Netty 編程]中的p.addlast。

Netty 網(wǎng)絡(luò)編程流程

最后,通過一張圖梳理下 Netty 的工作流程,并體現(xiàn)和 Java NIO API的關(guān)系。

圖片圖片

總結(jié)

在接觸 Netty 的之前一定要先掌握 Java NIO,不然云里霧里的。

本文只是介紹了 Java NIO 在 Netty 中的體現(xiàn)、Netty 對(duì) Java NIO 的封裝,讓大家更方便的理解 Netty,并不涉及 Netty 的高效、強(qiáng)大的設(shè)計(jì)之處,下文將會(huì)對(duì)此進(jìn)行介紹。

本文轉(zhuǎn)載自微信公眾號(hào)「Hi程序員」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系Hi程序員公眾號(hào)。

責(zé)任編輯:武曉燕 來源: Hi程序員
相關(guān)推薦

2012-11-14 09:48:57

HBase大數(shù)據(jù)

2011-12-08 08:58:28

JavaScript

2014-07-09 16:58:38

WIFI

2022-07-05 11:17:46

零信任安全技術(shù)網(wǎng)絡(luò)安全

2012-11-14 08:57:29

HBase

2019-12-02 12:50:52

LiFiWiFi通信網(wǎng)絡(luò)

2010-09-02 09:32:26

私有云

2013-01-25 11:17:17

Gartner大數(shù)據(jù)傳感器

2009-08-03 14:09:13

SAP中國(guó)真相SAP

2011-03-31 09:40:58

2012-09-19 13:47:53

HTML5

2011-02-18 14:43:21

人才

2010-06-25 09:19:18

云計(jì)算應(yīng)用

2016-06-07 13:53:43

ios蘋果概念

2020-12-16 07:51:42

項(xiàng)目個(gè)人博客支付

2011-05-16 10:10:51

2011-10-11 09:33:11

計(jì)算機(jī)工作

2021-03-01 14:47:00

Linux LiteWindows發(fā)行版

2020-12-02 15:03:48

工具 UI 開發(fā)

2016-10-19 09:17:15

HTML5Javascript可視化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日本不卡一区二区三区 | 国产成人精品一区二区三区四区 | 日本久久黄色 | 精品在线播放 | 日本成人中文字幕在线观看 | 国产一区二区在线免费观看 | 国产成人av一区二区三区 | 在线免费观看黄a | 91观看| 欧美精品一区二区免费 | 蜜桃在线视频 | 国产一区二区三区四区 | 国产欧美一级二级三级在线视频 | 精品美女视频在线观看免费软件 | 久久久国产精品入口麻豆 | 国产成人精品一区 | 亚洲成人在线视频播放 | 亚洲精品亚洲人成人网 | 五月婷婷激情网 | www.av7788.com | 国产精品久久久久久久久图文区 | 中文字幕一区在线 | 国产高清视频在线观看 | 影音先锋中文字幕在线观看 | 九九综合九九 | 国产一区免费视频 | 日本一区二区高清不卡 | 久久精品国产一区老色匹 | 一级毛片免费 | 婷婷久久综合 | 国产欧美一区二区三区在线播放 | 欧美日韩一区二区三区视频 | 国产成人精品一区二区三区在线观看 | 水蜜桃亚洲一二三四在线 | 成人区精品一区二区婷婷 | 午夜视频免费 | 综合久 | 欧美成人免费在线 | 日本一区二区三区在线观看 | 日韩成人免费av | 精品毛片视频 |