程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Netty:數據處理流程,netty數據處理流程

Netty:數據處理流程,netty數據處理流程

編輯:JAVA綜合教程

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了。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved