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

解析Mina代碼三部曲

開(kāi)發(fā) 后端
首先,Mina是什么?能幫我們做什么?我研究一個(gè)新技術(shù)的時(shí)候,首先問(wèn)的就是這樣的問(wèn)題。我個(gè)人的理解就是Mina是一個(gè)關(guān)注于通訊層的框架,任何需要底層通訊的應(yīng)用,都可以使用它。

首先,Mina是什么?能幫我們做什么?我研究一個(gè)新技術(shù)的時(shí)候,首先問(wèn)的就是這樣的問(wèn)題。我個(gè)人的理解就是Mina是一個(gè)關(guān)注于通訊層的框架,任何需要底層通訊的應(yīng)用,都可以使用它。更詳細(xì)準(zhǔn)確的介紹,請(qǐng)看官方網(wǎng)站http://mina.apache.org/

Mina的優(yōu)勢(shì):

1. 用NIO實(shí)現(xiàn),無(wú)需太多線程。可以處理的并發(fā)量更大。

2. 對(duì)于應(yīng)用層來(lái)說(shuō),編程更方便。

好了廢話少說(shuō),先看個(gè)Demo吧

 

  1. public static void main(String[] args) throws IOException {  
  2.     // 創(chuàng)建Acceptor   
  3.     IoAcceptor acceptor = new NioSocketAcceptor();  
  4.  
  5.     // 注冊(cè)filter   
  6.    acceptor.getFilterChain().addLast( "logger"new LoggingFilter() );  
  7.    acceptor.getFilterChain().addLast( "codec"new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));  
  8.  
  9.     // 注冊(cè)你的業(yè)務(wù)處理類(lèi)   
  10.     acceptor.setHandler( new TimeServerHandler() );  
  11.  
  12.     // 配置參數(shù)   
  13.     acceptor.getSessionConfig().setReadBufferSize( 2048 );  
  14.     acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );  
  15.  
  16.     // 讓Acceptor在綁定的地址偵聽(tīng)   
  17.     acceptor.bind( new InetSocketAddress(PORT) );  
  18. }  

 

IoHandler
  1. public interface IoHandler {  
  2.  
  3.      void sessionCreated(IoSession session) throws Exception;  
  4.  
  5.      void sessionOpened(IoSession session) throws Exception;  
  6.  
  7.      void sessionClosed(IoSession session) throws Exception;  
  8.  
  9.      void sessionIdle(IoSession session, IdleStatus status) throws Exception;  
  10.  
  11.      void exceptionCaught(IoSession session, Throwable cause) throws Exception;  
  12.  
  13.      void messageReceived(IoSession session, Object message) throws Exception;  
  14.  
  15.      void messageSent(IoSession session, Object message) throws Exception;  
  16. }   

首先new一個(gè)Acceptor,可以看出,Acceptor是我們要操作的服務(wù)器對(duì)象。然后,向Acceptor里注冊(cè)了兩個(gè)filter。filter的概念類(lèi)似于web服務(wù)器里的filter。filter處于你的業(yè)務(wù)端代碼和具體的發(fā)送數(shù)據(jù)代碼之間,它負(fù)責(zé)過(guò)濾或者說(shuō)處理傳遞過(guò)來(lái)的信息。業(yè)務(wù)處理代碼,寫(xiě)在Handler里。

代碼結(jié)構(gòu)相當(dāng)?shù)那逦N覀冃枰顚?xiě)的業(yè)務(wù)代碼就是 Handler 和 Filter了。它們倆很相似,但是在概念上是有區(qū)別的。filter事實(shí)上主要是處理底層的通信字節(jié)流,通信協(xié)議等,一般跟業(yè)務(wù)邏輯沒(méi)什么關(guān)系。Handler是專(zhuān)門(mén)暴露給應(yīng)用開(kāi)發(fā)者,用來(lái)填寫(xiě)業(yè)務(wù)處理代碼的。

看看下面的圖便知道了

 

 

#p#

Mina暴露給開(kāi)發(fā)者的接口主要是IoAcceptor(服務(wù)器端)或者IoConnector(客戶(hù)端)。Mina內(nèi)部具體是怎么實(shí)現(xiàn)偵聽(tīng),處理連接的呢?我們先來(lái)介紹一下Mina的方法哲學(xué)或者說(shuō)術(shù)語(yǔ)吧。

IoSession

IoSession: IoSession是一個(gè)客戶(hù)連接的抽象,整個(gè)通訊框架可以說(shuō),都是圍繞著IoSession工作的。

IoAcceptor: 初始化服務(wù)器,用的就是它

IoProcessor: 負(fù)責(zé)處理IoSession,包括創(chuàng)建,移除,讀寫(xiě)事件的處理

IoFilter: 過(guò)濾消息或者說(shuō)消息處理(通訊層的)

IoHandler: 消息處理(應(yīng)用邏輯層的)

通訊層的核心類(lèi),事實(shí)上是IoAcceptor,IoProcessor,IoSession。在這里我們只分析IoAcceptor模式,也就是服務(wù)器端的代碼。客戶(hù)端的代碼與此類(lèi)似,大家可以自己研究。

首先,調(diào)用IoAcceptor.bind()方法時(shí),服務(wù)器已經(jīng)初始化完畢,這時(shí)服務(wù)器就在指定的端口上開(kāi)始偵聽(tīng)客戶(hù)端發(fā)來(lái)的連接請(qǐng)求。

當(dāng)IoAcceptor偵聽(tīng)到客戶(hù)端請(qǐng)求時(shí),它就會(huì)把這個(gè)請(qǐng)求交給IoProcessor進(jìn)行處理。然后IoAcceptor回去繼續(xù)偵聽(tīng)。顯然,IoAcceptor的工作流程就是 偵聽(tīng) --> 傳遞請(qǐng)求 --> 繼續(xù)偵聽(tīng)。

IoProcessor得任務(wù)則是處理這些連接的IO事件。顯然IoProcessor不可能和IoAcceptor在同一個(gè)線程里運(yùn)行。他們兩個(gè)分工不同,可以并發(fā)執(zhí)行。Mina內(nèi)部事實(shí)上維護(hù)了一個(gè)IoProcessor對(duì)象池,對(duì)象池的默認(rèn)大小是CPU個(gè)數(shù)+1.也就是說(shuō),如果你的機(jī)器是4核的,可能就有5個(gè)IoProcessor(可以理解為線程)同時(shí)工作。

看看下面的示意圖吧,一圖勝千言:

 

 

 

 

#p#

在這里主要分析IoAcceptor 和 IoProcessor。

IoAcceptor比較簡(jiǎn)單,它的核心代碼都在AbstractPollingAccetor里,輪詢(xún)代碼在它的內(nèi)部類(lèi)Accetpor里的run方法里。請(qǐng)看下面的UML圖:

 

 

IoProcessor比較復(fù)雜,它的主要代碼是在AbstractPollingProcessor里的,輪詢(xún)代碼在它的內(nèi)部類(lèi)Processor里的run方法實(shí)現(xiàn)。值得注意的是,IoAcceptor所持有的IoProcessor引用,事實(shí)上是一個(gè)對(duì)象池。對(duì)象池負(fù)責(zé)調(diào)度某個(gè)Processor來(lái)處理請(qǐng)求。下面是UML類(lèi)圖

 

【編輯推薦】

  1. 巧解使Eclipse崩潰的JVM terminated問(wèn)題
  2. JVM terminated令Eclipse崩潰問(wèn)題的解決
  3. Java編譯過(guò)程與c/c++編譯過(guò)程有何不同
  4. 淺談jvm.dll裝載過(guò)程與源代碼分析
  5. Java虛擬機(jī)(JVM)中的內(nèi)存設(shè)置詳解
責(zé)任編輯:金賀 來(lái)源: JavaEye博客
相關(guān)推薦

2009-09-14 09:04:17

CCNA考試CCNA

2011-03-25 09:56:40

Nagios 安裝

2010-07-17 01:12:31

Telnet服務(wù)

2010-09-26 14:39:40

DHCP故障分析

2013-06-28 09:35:04

Hypervisor虛擬化成本

2010-09-06 09:22:26

CSS語(yǔ)法

2011-03-21 09:22:46

Tomcat

2022-10-10 09:10:51

家庭網(wǎng)絡(luò)網(wǎng)絡(luò)

2017-02-07 14:50:39

華為

2017-04-11 09:07:20

互聯(lián)網(wǎng)

2015-05-12 10:42:53

程序員代碼

2012-09-10 16:19:00

云計(jì)算公共云

2010-09-14 16:54:18

2018-03-18 15:51:59

人工智能潛力首席數(shù)據(jù)官

2018-03-19 09:35:37

人工智能

2011-08-29 16:26:50

魔獸世界LUA

2010-05-12 10:51:06

2011-08-03 10:33:05

網(wǎng)絡(luò)管理網(wǎng)絡(luò)拓?fù)涔芾?/a>

2019-03-28 14:45:33

數(shù)據(jù)安全數(shù)據(jù)泄露信息安全

2010-05-20 17:24:25

Cookie設(shè)置
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 在线视频一区二区 | www.日本在线| 久久久精品一区二区三区 | 欧美中文字幕一区二区三区亚洲 | 在线视频日韩 | 久久乐国产精品 | 欧产日产国产精品99 | 久久爆操| 欧美 视频| 一级毛片在线播放 | 99久热| 亚洲高清免费视频 | 91在线观看| 免费国产网站 | 国产激情91久久精品导航 | www.日韩 | www.亚洲区| av大全在线观看 | 免费久久久| 黄色香蕉视频在线观看 | 成人一区av | 中文字幕1区2区3区 亚洲国产成人精品女人久久久 | 成人精品国产一区二区4080 | 亚洲精品一区二区三区蜜桃久 | 久久99这里只有精品 | 狠狠色综合网站久久久久久久 | 中文在线一区二区 | 国产在线观看不卡一区二区三区 | 精品一区av | 岛国av在线免费观看 | 国产美女福利在线观看 | 日韩中文在线观看 | 午夜精品一区二区三区在线观看 | 国产成人精品高清久久 | 久久久久久高清 | 欧美日韩高清 | 国产精品区一区二 | 亚洲精品三级 | 国产精品99久久久久久久vr | 国产91综合 | 91在线视频播放 |