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

談談你對Netty中,Pipeline工作原理的理解?

開發 前端
每個Context中又會包含一個ChannelHandler,我們通過addLast()方法往Pipeline中添加的對象,并且Handler的添加順序會影響代碼的執行順序。而這些Handler本質上都是實現編碼和解碼的功能,不管是編碼器還是解碼器都必須實現ChannelHandler接口。

1位工作8年的小伙伴,去某東面試IM部門,被問到這樣一道面試題。說,請你談一談你對Netty Pipeline設計原理的理解。當時,他說只是用過Netty的Pipline,原理沒有深入了解過,然后就沒有然后了。

今天,我給大家講一講,我對Netty Pipeline的理解。

1、結構設計

Netty中的Pipeline本質上是一個雙向鏈表,它采用了責任鏈模式。在Netty中每個Channel都有且僅有一個ChannelPipeline與之對應,它們的組成關系如下圖所示。

圖片

NEW

通過上圖可以看到,一個Channel包含了一個ChannelPipeline,而ChannelPipeline中又維護了一個由ChannelHandlerContext組成的雙向鏈表。這個鏈表的頭叫HeadContext,鏈表的尾叫TailContext,并且每個ChannelHandlerContext中又關聯著一個ChannelHandler。

2、工作原理

首先來看這樣一段代碼:

圖片

NEW

Bootstrap client = new Bootstrap(); client.channel(NioSocketChannel.class) .handler(new ChannelInitializer() { @Override protected void initChannel(Channel ch) throws Exception { //接收課客戶端請求的處理流程 ChannelPipeline pipeline = ch.pipeline(); //對象編碼器 pipeline.addLast("encoder",new ObjectEncoder()); //對象解碼器 pipeline.addLast("encoder",new ObjectDecoder()); } });

對于用過Netty的小伙伴來說,應該非常熟悉。在Netty中,Pipeline的初始化,是通過調用Channel的handler()方法,然后在handler()方法中傳入一個叫做ChannelInitializer的對象,通過SocketChannel構建出一個新的Pipeline對象。每次調用addLast()方法,都會在Pipelie的末端插入一個ChannelHandlerContext。如圖所示:

圖片

NEW

每個Context中又會包含一個ChannelHandler,我們通過addLast()方法往Pipeline中添加的對象,并且Handler的添加順序會影響代碼的執行順序。而這些Handler本質上都是實現編碼和解碼的功能,不管是編碼器還是解碼器都必須實現ChannelHandler接口。

圖中的Handler就是我們代碼程序要執行的邏輯。而Netty默認幫我們實現了非常多內置Handler,我們只需要直接拿過來用就可以了。當然,我們也可以自己實現ChannelHandler接口,來實現自定義的編、碼器。比如自定義通信協議等等。

當所有的Handler全部添加到Pipeline中以后,Netty就會將這些Handler組裝成一個雙向鏈表,從而實現串行化調用。從頭部往尾部執行的Handler被稱為Inbound,用來接收用戶請求,從尾部往頭部執行的Handler被稱為Outbound,用來給用戶響應。所以,Inbound可以用來實現解碼的功能、而Outbound可以用來實現編碼的功能。

好了,以上就是我對Pipeline設計原理的理解。

責任編輯:武曉燕 來源: Tom彈架構
相關推薦

2022-10-09 15:18:31

SwaggerOpenAPI工具

2022-08-14 07:14:50

Kafka零拷貝

2023-11-28 12:25:02

多線程安全

2022-06-30 09:10:33

NoSQLHBaseRedis

2022-09-23 11:00:27

KafkaZookeeper機制

2024-05-31 08:10:58

Netty線程模型多路復用模型

2022-08-26 00:02:03

RocketMQ單體架構MQ

2021-07-16 07:57:34

ReduxDOM組件

2022-09-19 07:57:59

云服務互聯網基礎設施

2024-09-20 05:46:00

2024-09-11 16:49:55

2024-09-02 16:10:19

vue2前端

2022-08-29 16:03:33

狀態流轉Java

2022-09-28 16:37:59

SpringMVC框架

2022-09-09 10:15:06

OAuthJava

2022-03-21 09:05:18

volatileCPUJava

2024-10-24 16:14:43

數據傳輸CPU零拷貝

2025-03-21 00:00:05

Reactor設計模式I/O 機制

2022-08-26 00:21:44

IO模型線程

2024-12-06 14:34:00

Spring過濾器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 夜久久 | 色婷婷综合久久久久中文一区二区 | 91久久国产综合久久 | 国产精品久久久久久久午夜片 | 成人av免费网站 | 国产精品1区2区3区 中文字幕一区二区三区四区 | 午夜视频免费网站 | 日本a∨精品中文字幕在线 亚洲91视频 | 中文字幕亚洲视频 | 久久机热| 久久精品久久精品久久精品 | 午夜国产| 在线播放国产视频 | 日韩av最新网址 | 欧美人成在线视频 | 国产一区二区不卡 | 99re6在线视频| 中文字幕亚洲欧美 | 一区二区免费在线观看 | 精品日韩一区 | 久久久久久久夜 | www.887色视频免费 | 一区在线播放 | 在线观看黄色电影 | 日韩成人在线视频 | 9色网站 | 国产成人99久久亚洲综合精品 | 亚洲国产精品一区二区第一页 | 99精品99久久久久久宅男 | 国产精品3区 | 激情欧美日韩一区二区 | 久久电影一区 | 国内激情av片 | 免费看啪啪网站 | 日日日视频 | 日屁视频 | 涩涩视频网站在线观看 | 在线观看视频一区 | 国产精品美女久久久久久久网站 | 欧美一区二区三区在线 | 国产精品久久久久aaaa九色 |