netty技術(shù)實(shí)現(xiàn)即時(shí)通信方案_第1頁(yè)
netty技術(shù)實(shí)現(xiàn)即時(shí)通信方案_第2頁(yè)
netty技術(shù)實(shí)現(xiàn)即時(shí)通信方案_第3頁(yè)
netty技術(shù)實(shí)現(xiàn)即時(shí)通信方案_第4頁(yè)
netty技術(shù)實(shí)現(xiàn)即時(shí)通信方案_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

nettynetty是啥netty是jboss下的是開(kāi)源項(xiàng)目。一個(gè)封裝Socket的jar??梢钥焖匍_(kāi)發(fā)高性能,高可靠的網(wǎng)絡(luò)服務(wù)器與客戶(hù)端程序。與apache下的mina是同一個(gè)作者(TrustinLee),并且是優(yōu)化版。netty的優(yōu)點(diǎn)1.開(kāi)發(fā)簡(jiǎn)單,完整的Doc和用戶(hù)樣例,適用于不同的協(xié)議。2.基于靈活,可擴(kuò)展的事件驅(qū)動(dòng)模型。3.可靠soket支持,高度可定制的線(xiàn)程模型。4.更好的吞吐量,低延遲,節(jié)省資源,內(nèi)部?jī)?yōu)化成熟,減少不必要的內(nèi)存拷貝5.能與android環(huán)境運(yùn)行良好。6.完整的SSL/TLS和STARTTLS的支持Netty整體架構(gòu)

Netty組件

ChannelFactoryBossWorkerChannelChannelEventPipelineChannelContextHandlerSink

Server端核心類(lèi)NioServerSocketChannelFactoryNioServerBossPool

NioWorkerPoolNioServerBossNioWorkerNioServerSocketChannelNioAcceptedSocketChannelDefaultChannelPipelineNioServerSocketPipelineSinkChannels

ChannelFactoryChannel工廠(chǎng),很重要的類(lèi)保存啟動(dòng)的相關(guān)參數(shù)

NioServerSocketChannelFactoryNioClientSocketChannelFactoryNioDatagramChannelFactory

這是Nio的,還有Oio和Local的

SelectorPool

Selector的線(xiàn)程池

NioServerBossPool默認(rèn)線(xiàn)程數(shù):1NioClientBossPool

1NioWorkerPool

2*ProcessorNioDatagramWorkerPool

Selector

選擇器,很核心的組件

NioServerBossNioClientBossNioWorkerNioDatagramWorker

Channel

通道

NioServerSocketChannelNioClientSocketChannelNioAcceptedSocketChannelNioDatagramChannel

Sink負(fù)責(zé)和底層的交互如bind,Write,Close等

NioServerSocketPipelineSinkNioClientSocketPipelineSinkNioDatagramPipelineSink

Pipeline負(fù)責(zé)維護(hù)所有的Handler

ChannelContext一個(gè)Channel一個(gè),是Handler和Pipeline的中間件

Handler對(duì)Channel事件的處理器

ChannelPipeline

優(yōu)秀的設(shè)計(jì)----事件驅(qū)動(dòng)

優(yōu)秀的設(shè)計(jì)----線(xiàn)程模型

案例Server端:package;import;import.*;importty.channel.socket.nio.NioServerSocketChannelFactory;import;import;import;import;/***GodBlessYou!*Author:Fangniude*Date:2013-07-15*/publicclassNettyServer{publicstaticvoidmain(String[]args){ServerBootstrapbootstrap=newServerBootstrap(newNioServerSocketChannelFactory(Executors.newCachedThreadPool(),Executors.newCachedThreadPool()));//Setupthedefaulteventpipeline.bootstrap.setPipelineFactory(newChannelPipelineFactory(){@OverridepublicChannelPipelinegetPipeline()throwsException{returnChannels.pipeline(newStringDecoder(),newStringEncoder(),newServerHandler());}});//Bindandstarttoacceptincomingconnections.Channelbind=bootstrap.bind(newInetSocketAddress(8000));("Server已經(jīng)啟動(dòng),監(jiān)聽(tīng)端口:"+bind.getLocalAddress()+",等待客戶(hù)端注冊(cè)。。。");}privatestaticclassServerHandlerextendsSimpleChannelHandler{@OverridepublicvoidmessageReceived(ChannelHandlerContextctx,MessageEvente)throwsException{if(e.getMessage()instanceofString){Stringmessage=(String)e.getMessage();("Client發(fā)來(lái):"+message);e.getChannel().write("Server已收到剛發(fā)送的:"+message);("\n等待客戶(hù)端輸入。。。");}super.messageReceived(ctx,e);}@OverridepublicvoidexceptionCaught(ChannelHandlerContextctx,ExceptionEvente)throwsException{super.exceptionCaught(ctx,e);}@OverridepublicvoidchannelConnected(ChannelHandlerContextctx,ChannelStateEvente)throwsException{("有一個(gè)客戶(hù)端注冊(cè)上來(lái)了。。。");("Client:"+e.getChannel().getRemoteAddress());("Server:"+e.getChannel().getLocalAddress());("\n等待客戶(hù)端輸入。。。");super.channelConnected(ctx,e);}}}客戶(hù)端:package;import;import.*;importty.channel.socket.nio.NioClientSocketChannelFactory;import;import;import;import;import;import;/***GodBlessYou!*Author:Fangniude*Date:2013-07-15*/publicclassNettyClient{publicstaticvoidmain(String[]args){//Configuretheclient.ClientBootstrapbootstrap=newClientBootstrap(newNioClientSocketChannelFactory(Executors.newCachedThreadPool(),Executors.newCachedThreadPool()));//Setupthedefaulteventpipeline.bootstrap.setPipelineFactory(newChannelPipelineFactory(){@OverridepublicChannelPipelinegetPipeline()throwsException{returnChannels.pipeline(newStringDecoder(),newStringEncoder(),newClientHandler());}});//Starttheconnectionattempt.ChannelFuturefuture=bootstrap.connect(newInetSocketAddress("localhost",8000));//Waituntiltheconnectionisclosedortheconnectionattemptfails.future.getChannel().getCloseFuture().awaitUninterruptibly();//Shutdownthreadpoolstoexit.bootstrap.releaseExternalResources();}privatestaticclassClientHandlerextendsSimpleChannelHandler{privateBufferedReadersin=newBufferedReader(newInputStreamReader(System.in));@OverridepublicvoidmessageReceived(ChannelHandlerContextctx,MessageEvente)throwsException{if(e.getMessage()instanceofString){Stringmessage=(String)e.getMessage();(message);e.getChannel().write(sin.readLine());("\n等待客戶(hù)端輸入。。。");}super.messageReceived(ctx,e);}@Overridepu

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論