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

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

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

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

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

1、結(jié)構(gòu)設計

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

圖片

NEW

通過上圖可以看到,一個Channel包含了一個ChannelPipeline,而ChannelPipeline中又維護了一個由ChannelHandlerContext組成的雙向鏈表。這個鏈表的頭叫HeadContext,鏈表的尾叫TailContext,并且每個ChannelHandlerContext中又關(guān)聯(lián)著一個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的初始化,是通過調(diào)用Channel的handler()方法,然后在handler()方法中傳入一個叫做ChannelInitializer的對象,通過SocketChannel構(gòu)建出一個新的Pipeline對象。每次調(diào)用addLast()方法,都會在Pipelie的末端插入一個ChannelHandlerContext。如圖所示:

圖片

NEW

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

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

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

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

責任編輯:武曉燕 來源: Tom彈架構(gòu)
相關(guān)推薦

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單體架構(gòu)MQ

2021-07-16 07:57:34

ReduxDOM組件

2022-09-19 07:57:59

云服務互聯(lián)網(wǎng)基礎設施

2024-09-02 16:10:19

vue2前端

2022-08-29 16:03:33

狀態(tài)流轉(zhuǎn)Java

2024-09-20 05:46:00

2024-09-11 16:49:55

2022-09-28 16:37:59

SpringMVC框架

2022-09-09 10:15:06

OAuthJava

2022-03-21 09:05:18

volatileCPUJava

2025-03-21 00:00:05

Reactor設計模式I/O 機制

2024-10-24 16:14:43

數(shù)據(jù)傳輸CPU零拷貝

2022-08-26 00:21:44

IO模型線程

2024-12-06 14:34:00

Spring過濾器
點贊
收藏

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

主站蜘蛛池模板: 日韩网站在线观看 | 日韩欧美国产一区二区 | 婷婷二区| 在线观看av网站永久 | 亚洲电影在线播放 | 久久久久久蜜桃一区二区 | 日本精品一区二区三区视频 | 激情91 | 成人免费网站视频 | 在线精品一区二区三区 | 成人在线免费视频 | 五月婷婷激情网 | 色婷婷亚洲国产女人的天堂 | 四虎永久 | 999久久久精品 | 在线 丝袜 欧美 日韩 制服 | 欧美v日韩v | 亚洲国产精品suv | www.国产91| 亚洲精品乱码久久久久久久久久 | 国产精品久久久久久久午夜 | 中文成人在线 | 久久久www成人免费无遮挡大片 | 精品久久久久国产免费第一页 | caoporn免费在线视频 | 91久久精品日日躁夜夜躁欧美 | 女人精96xxx免费网站p | 成人一区二| 这里精品| 欧美三区在线观看 | 午夜一级大片 | 亚洲精品白浆高清久久久久久 | 亚洲不卡在线观看 | 男人天堂999 | 久久久久国产精品一区二区 | a级片播放 | 精品免费国产视频 | 久久高清精品 | 中文字幕亚洲视频 | 国产日韩欧美在线 | 久久高清 |