Netty:資料處理流程,netty資料處理流程

來源:互聯網
上載者:User

Netty:資料處理流程,netty資料處理流程

Netty作為非同步、事件驅動一個網路通訊架構,使用它可以協助我們快速開發高效能高可靠性的網路服務。

         為了更好的使用Netty來解決開發中的問題,學習Netty是很有必要的。

         Netty現在主流有三個版本:Netty3、Netty4、Netty5。這三個版本中,變化最大的要數執行緒模式了,各版本的執行緒模式均不相同。但是有一點是變化不大的,那就是Channel模型,因而資料處理流程也不會有太大的變化。所以本篇就來說一下Netty的資料處理流程,各版本的執行緒模式會後續說明。

 

Channel 模型

         關於Netty Channel的模型,做了一個簡易圖:

 

 

一個Channel中包括一個Socket、一個ChannelPipeline。一個ChannelPipeline中有一個ChannelSink和多個ChannelHandler。ChannelHandler分為兩種:UpstremHandler、DownstreamHandler。

 

不論是讀資料還是寫資料都要經過Channel中的ChannelPipeline。讀資料的過程是從Socket到ChannelPipeline,由ChannelPipeline交給裡面的UpstreamHandler(或者叫做InBoundHandler)從下到上依次處理 。寫資料時,由要經過ChannelPipeline裡面在DownStreamHandler(或者是OutBoundHandler)由上到下依次處理。

 

 

Channel的建立

Channel主要分為兩種:ServerSocketChannel、SocketSocketChannel。這裡不對是否是NIO作區分。

ServerSocketChannel的建立在bind時自動完成,SocketChannel的建立由Netty協助完成。不論是用戶端在建立串連時, 還是服務端接收到用戶端串連時,SocketChannel的建立都是由Netty協助完成

         在建立Channel時,就會自動調用相應的ChannelPipeline建立器來建立了。在建立ChannelPipeline時,可以由使用者配置相關的ChannelHandler。ServerSocketChannel可以由使用者定製一個ChannelHandler,SocketChannel則可以由使用者定製多個ChannelHandler。

 

在各版本中用於定製的方法可能是不同的。

 

 

 

ChannelSink

這個組件主要見於V3

ChannelSink的有2個作用:

1、當出現異常時,通過exceptionCaught向沿著Pipeline上傳遞ExceptionEvent,(channel.getPipeline().sendUpsteam(new DefaultExceptionEv ent(channel,ex)));

2、當一個Message或者一個Events沿著Pipeline從上到下執行完所有的ChannelHandler處理後,進入ChannelSink的eventSunk方法。

 

 

下面就說一下Server端、Client端的Sink的作用:

ServerSocketPipelineSink eventSunk:

  • 當建立ServerSocket時,提交Boss任務。
  • 當接收到Socket時,建立SocketChannel,並將一個Worker任務交給Worker Executor。

 

ClientSocketPipelineSink eventSunk:

1)當在Pipeline上流轉的是ChannelEvent時:

·如果是建立串連的event,將一個worker任務交給worker executor

·如果是興趣event,則註冊興趣事件。

2)當在Pipeline上流轉的是message時:

  將要寫的資料放到寫隊列中,然後調用NioWorker的writeFromUserCode方法。

 

 

ChannelHandler

Netty是由事件驅動的架構,任何操作操作都是由事件來驅動的。

ChannelHandler就是一個Event Hander(事件處理器),它的作用是:

·處理IO事件(讀寫),例如讀取資料,並解碼。

         ·處理興趣事件。

         ·交給下一個ChannelHandler處理。

 

 

寫資料有兩種方式可以觸發

 

 

 

 

上述呢,簡單了說了一下Channel中各組件的作用以及處理流程,知道這些東西,已經可以協助我們理解並使用Netty了。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.