用戶手冊快速有效的網(wǎng)絡(luò)應(yīng)用開發(fā)_第1頁
用戶手冊快速有效的網(wǎng)絡(luò)應(yīng)用開發(fā)_第2頁
用戶手冊快速有效的網(wǎng)絡(luò)應(yīng)用開發(fā)_第3頁
用戶手冊快速有效的網(wǎng)絡(luò)應(yīng)用開發(fā)_第4頁
用戶手冊快速有效的網(wǎng)絡(luò)應(yīng)用開發(fā)_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、Netty3.2 快速有效的網(wǎng)絡(luò)應(yīng)用開3.2.4.Final 譯者LarryZhang 二次整理1. 問題提2. 解決方1. 開1.1Netty3.2 快速有效的網(wǎng)絡(luò)應(yīng)用開3.2.4.Final 譯者LarryZhang 二次整理1. 問題提2. 解決方1. 開1.1. 寫在開始之. 1.3. Received. . . 1.7處理基于流的傳 1.7.1套接字緩存(SocketBuffer)的一個(gè)小警 1.7.2. 第一個(gè)解決辦 1.7.3. 第二個(gè)解決辦 1.8. POJO1.9. 關(guān)閉應(yīng)用程 1.10. 2. 架構(gòu)概2.1豐富的緩存數(shù)據(jù)結(jié)I/O2.3. 基 2.4. 2.4.1. 編碼框2

2、.4.2SSLTLS 支2.4.3HTTP實(shí)ProtocolBuffer集2.5. 總前1問題提常常使用2.4. 2.4.1. 編碼框2.4.2SSLTLS 支2.4.3HTTP實(shí)ProtocolBuffer集2.5. 總前1問題提常常使用HTTP客戶從WEB服務(wù)器上獲不適用通用的 的 多2解決方 高 Chapter1開1.1. 開始之. 1.3. Received. . . 1.7處理基于流的傳 1.7.1套接字緩存(SocketBuffer)的一個(gè)小警 1.7.2. 1.7.3. 1.8. POJO1.9關(guān)閉你的應(yīng)用程 1.10. 這一章圍繞Neey Chapter 2,架構(gòu)概覽開始,然后

3、再回到這里1.1. 開始之此。 API頁面上。此外,記Netty并告1.2. 編寫一個(gè) Discard服個(gè) , , 個(gè) 當(dāng)一個(gè)異常因?yàn)镮/O 錯(cuò)誤由Netty 拋出,或者由在處理事件過程中,handler 的實(shí)現(xiàn)拋出了異常 ,并且對應(yīng)channel應(yīng)已經(jīng)實(shí)現(xiàn)了 DISCARD 服務(wù)的一半。接下來需要寫 main 方法來運(yùn)行這個(gè)配備到此為import .InetSocketAddress; importjava.util.concurrent.Executors;publicclassDiscardServerpublicicvoidmain(Stringargs)throwsException

4、 new( Executors.newCachedThre 使用 建 和 ServerBootstrapbootstrap=newServerBootstrap bootstrap.setPipelineFactory(new publicChannelPipelinegetPipeline() bootstrap.setOption(child.keepAlive, true); 的 的 剛 問題是 著 buf = (ChannelBuffer) e.getMessage(); uf.readable() ln(char)buf.readByte(); 多個(gè) 。多個(gè) 。 le.discard

5、 包1.4. 編寫一個(gè) Echo服這。這里返回的Channel 代表收到消息事MessageEvent 的那個(gè)連接 1.5. 編寫一個(gè) Time服 ch = e.getChannel(); messageReceived 方法,而是需要重channelConnected 方法。代碼如下 eEvente) Channelch=(System.currentTimeMillis() / 1000);ChannelFuturef= public 釋過, 釋過, 用 尚未發(fā)生的后續(xù)I/O操作ChannelFuture 為 importChannelBuffer dynamicBuf= 也返回 的 完成

6、后關(guān)Channel 1.6. Time客戶需要一TIME 的 import .InetSocketAddress; importjava.util.concurrent.Executors;publicclassTimeC ntChannelch= NioServerSocketChannelFactoryC ntBootstrap 在客戶端,對應(yīng)服務(wù)器端的ServerBootstrap publicicvoidmain(Stringargs)throwsString host=port new( Executors.newCachedThrentBootstrapbootstrap=newn

7、tBootstrap bootstrap.setPipelineFactory(new publicChannelPipelinegetPipeline()returnChannels.pipeline(newTimeC bootstrap.setOption(keepAlive, true);(new InetSocketAddress(host, 應(yīng)該connect方法而不是bind 方法應(yīng)該connect方法而不是bind 方法 收 看上去真的很簡單,并且和服務(wù)器端代碼沒什么區(qū)別。不過,這個(gè) IndexOutOfBoundsExceptionimport publicclassTimeC

8、 long currentTimeMillis = buf.read() * 1000L;ln(newDate(currentTimeMillis); e.getCause().pr1.7. 處理基于流的傳1.7.1. 1.7. 處理基于流的傳1.7.1. 1.7.2. 現(xiàn)在TIME例子個(gè) |ABC|DEF|GHI|AB |CDEFG|H|I|ABC|DEF|GHITimeC importimport publicclassTimeC privatefinalChannelBufferbuf= ifytes()=4)long currentTimeMillis = buf.read() * 1

9、000L; ln(newDate(currentTimeMillis); 這個(gè)動態(tài)的緩存是能夠根據(jù)需要增加容量ChannelBuffer 。這這個(gè)動態(tài)的緩存是能夠根據(jù)需要增加容量ChannelBuffer 。這首先,所有收到的數(shù)據(jù)都必須匯聚到buf中 1.7.3. 你可能也注意到,你可以增加多個(gè) ChannelHandler 給 ChannelPipeline,由此,你可以拆分單ChannelHandler 為多個(gè)模塊化的 handler 來減少你的應(yīng)用程序的復(fù)雜度。 例如, 你可以拆分TimeC TimeDecoder 處理字節(jié)重最初那個(gè)簡單的TimeC publicclassTimeDec

10、oderextendsprotectedObject FrameDecoder ChannelHandler 的一個(gè)實(shí)現(xiàn),使得處理重組問題簡單FrameDecoder調(diào)用decode方法,收到新的數(shù)據(jù)時(shí)FrameDecoder ChannelHandler 的一個(gè)實(shí)現(xiàn),使得處理重組問題簡單FrameDecoder調(diào)用decode方法,收到新的數(shù)據(jù)時(shí)如果返回的是null 以為這收到的數(shù)據(jù)還FrameDecoder 會在數(shù)據(jù)量足夠的時(shí)候再次調(diào)用 了一個(gè)消息。FrameDecoder 會丟棄位于 直至返null已經(jīng)有了另一個(gè) handler 可以現(xiàn)在到 ChannelPipeline應(yīng)該修TimeC

11、 nt ChannelPipelineFactory 實(shí)現(xiàn) API手冊以獲bootstrap.setPipelineFactory(new publicChannelPipelinegetPipeline() newTimeC ifytes()returnreturn此外,Netty 提供了一些“開箱即用”此外,Netty 提供了一些“開箱即用” net針對的是基于行的文本協(xié)1.8. POJO 、可復(fù)用。在這個(gè)ITME客戶端、服務(wù)器端的例子中只 protectedObjecte)returnprotectedObject if (buffer.readabytes()4) return nul

12、l;import publicprivatepublic this.value=returnpublicStringtoString()returnnewDate(value* 的方法后,TimeC 是不是看上去更簡單、 更優(yōu)雅了? 同樣的技術(shù)可以用于服務(wù)器端這次先更新一 下現(xiàn)在唯一缺少的就是編了。 這個(gè)編應(yīng)該是一個(gè)把 ChannelBuffer 轉(zhuǎn)換為 UnixTime UnixTimetime=newUnixTime(System.currentTimeMillis()/ChannelFuturef=e.getChannel().write(time); UnixTimem=(UnixTi

13、me)e.getMessage(); System.out.pr ln(m); returnnew編一個(gè)寫入的請求。請注意MessageEvent 參數(shù)編一個(gè)寫入的請求。請注意MessageEvent 參數(shù)和messageReceived的是同一類型,但是卻有不同的解讀。一個(gè)ChannelEvent 可以是上行或下行件,這取決于事件的傳遞方向。比如,MessageEvent在messageReceived中是上行事件,但是區(qū) 新的 中的前一個(gè) 用 importimport publicvoidwriteRequested(ChannelHandlerContextctx,UnixTimetim

14、e=(UnixTime) 的 1.9. 關(guān)閉應(yīng)用的 1.9. 關(guān)閉應(yīng)用程 字 如果在 TimeC nt 應(yīng)用這三步, 關(guān)閉唯一的客戶端連接所有 ChannelFactory 持有的資 publicclassTimeC ntpublicicvoidmain(Stringargs)throwsException ChannelPipelin peline=write(ctx, e.getFuture(), buf); 。 ChannelFuture 的getCause() 待 的 需要一所有活動連接的數(shù)據(jù)結(jié)構(gòu),這可不是瑣碎的小事兒一樁。還好,有一個(gè)辦法,那就ChannelGroupChannelF

15、uturefuture=bootstrap.connect(.); ifs()future.getCause().pr ChannelGroup代表打開Channel的集合JavacollectionAPI的特殊擴(kuò)展。如果一個(gè)ChannelGroup代表打開Channel的集合JavacollectionAPI的特殊擴(kuò)展。如果一個(gè)Channel入了 ChannelGroup, 然后這個(gè) Channel 被關(guān)閉了, 那么這個(gè)關(guān)閉的 Channel 會自動從它的ChannelGroup 中移除。你可以對一個(gè)組執(zhí)行一個(gè)操作,卻作用于所有屬于同一個(gè)組的Channel。比如你可以在停止服務(wù)器的時(shí)候,關(guān)閉

16、一ChannelGroup內(nèi)所有的ChannelTimeServerHandler ChannelGroup( TimeServer.allChannels)添加一個(gè)新的ChannelGroup 是線程安全的這下所有的啟用Channel都自動publicclassTimeServer publicicvoidmain(Stringargs)throwsException Channelchannel=bootstrap.bind(.); ServerBootstrap的bind 方法返回了一個(gè)服 ServerBootstrap的bind 方法返回了一個(gè)服務(wù)器端的、綁定了指定本地地址的Chann

17、el。調(diào)返回的Channelclose()方法可以使得它和綁定的本地地址解除綁定 的 包括綁定的服務(wù)Channel 會解除綁定,所有的受理的連接會被異步地關(guān)閉得到所有連 1.10. 總 區(qū) 一直都在期待Chapter2架構(gòu)概. I/O2.3. 基2.4. 為更快捷開發(fā)的高級組2.4.1. 編碼框2.4.2SSLTLS 支2.4.3HTTP 實(shí)ProtocolBuffer集2.5. 總2.4.2SSLTLS 支2.4.3HTTP 實(shí)ProtocolBuffer集2.5. 總。2.1. 豐富的 Buffer數(shù)據(jù)結(jié) 如果必要,你可以定義你buffer 再也不需flip() 了 ByteBuffer速

18、度ty.buffer 包描述I/OJava 中傳統(tǒng)的 I/O API為不同的傳輸類型提供了不同的類型和方法。例如, .Socket ty.buffer 包描述I/OJava 中傳統(tǒng)的 I/O API為不同的傳輸類型提供了不同的類型和方法。例如, .Socket 候就確定你的而應(yīng)用程序基于哪套API 的API提供了很多重要的傳輸方式 另一種 替換掉幾行構(gòu)造方法的代碼。此外2.3基者鏈模式的事件模2.3基者鏈模式的事件模 針對 ChannelEventChannelPipeline中的ChannelHandler來處理。pipeline實(shí)現(xiàn)了一 ercepting Filter模式的高級形式,使得用戶可以完全控制事件是如何被處理的、handler之間如 public class MyWriteHandler implements SimpleChannelHandler Objectmessage=/Dosomethingwit

溫馨提示

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

最新文檔

評論

0/150

提交評論