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

下載本文檔

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

文檔簡介

1、Netty3.2 快速有效的網(wǎng)絡應用開3.2.4.Final 譯者LarryZhang 二次整理1. 問題提2. 解決方1. 開1.1Netty3.2 快速有效的網(wǎng)絡應用開3.2.4.Final 譯者LarryZhang 二次整理1. 問題提2. 解決方1. 開1.1. 寫在開始之. 1.3. Received. . . 1.7處理基于流的傳 1.7.1套接字緩存(SocketBuffer)的一個小警 1.7.2. 第一個解決辦 1.7.3. 第二個解決辦 1.8. POJO1.9. 關閉應用程 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實ProtocolBuffer集2.5. 總前1問題提常常使用2.4. 2.4.1. 編碼框2.4.2SSLTLS 支2.4.3HTTP實ProtocolBuffer集2.5. 總前1問題提常常使用HTTP客戶從WEB服務器上獲不適用通用的 的 多2解決方 高 Chapter1開1.1. 開始之. 1.3. Received. . . 1.7處理基于流的傳 1.7.1套接字緩存(SocketBuffer)的一個小警 1.7.2. 1.7.3. 1.8. POJO1.9關閉你的應用程 1.10. 這一章圍繞Neey Chapter 2,架構(gòu)概覽開始,然后

3、再回到這里1.1. 開始之此。 API頁面上。此外,記Netty并告1.2. 編寫一個 Discard服個 , , 個 當一個異常因為I/O 錯誤由Netty 拋出,或者由在處理事件過程中,handler 的實現(xiàn)拋出了異常 ,并且對應channel應已經(jīng)實現(xiàn)了 DISCARD 服務的一半。接下來需要寫 main 方法來運行這個配備到此為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(); 多個 。多個 。 le.discard

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

6、后關Channel 1.6. Time客戶需要一TIME 的 import .InetSocketAddress; importjava.util.concurrent.Executors;publicclassTimeC ntChannelch= NioServerSocketChannelFactoryC ntBootstrap 在客戶端,對應服務器端的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, 應該connect方法而不是bind 方法應該connect方法而不是bind 方法 收 看上去真的很簡單,并且和服務器端代碼沒什么區(qū)別。不過,這個 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例子個 |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); 這個動態(tài)的緩存是能夠根據(jù)需要增加容量ChannelBuffer 。這這個動態(tài)的緩存是能夠根據(jù)需要增加容量ChannelBuffer 。這首先,所有收到的數(shù)據(jù)都必須匯聚到buf中 1.7.3. 你可能也注意到,你可以增加多個 ChannelHandler 給 ChannelPipeline,由此,你可以拆分單ChannelHandler 為多個模塊化的 handler 來減少你的應用程序的復雜度。 例如, 你可以拆分TimeC TimeDecoder 處理字節(jié)重最初那個簡單的TimeC publicclassTimeDec

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

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

12、l;import publicprivatepublic this.value=returnpublicStringtoString()returnnewDate(value* 的方法后,TimeC 是不是看上去更簡單、 更優(yōu)雅了? 同樣的技術可以用于服務器端這次先更新一 下現(xiàn)在唯一缺少的就是編了。 這個編應該是一個把 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編一個寫入的請求。請注意MessageEvent 參數(shù)編一個寫入的請求。請注意MessageEvent 參數(shù)和messageReceived的是同一類型,但是卻有不同的解讀。一個ChannelEvent 可以是上行或下行件,這取決于事件的傳遞方向。比如,MessageEvent在messageReceived中是上行事件,但是區(qū) 新的 中的前一個 用 importimport publicvoidwriteRequested(ChannelHandlerContextctx,UnixTimetim

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

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

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

17、el。調(diào)返回的Channelclose()方法可以使得它和綁定的本地地址解除綁定 的 包括綁定的服務Channel 會解除綁定,所有的受理的連接會被異步地關閉得到所有連 1.10. 總 區(qū) 一直都在期待Chapter2架構(gòu)概. I/O2.3. 基2.4. 為更快捷開發(fā)的高級組2.4.1. 編碼框2.4.2SSLTLS 支2.4.3HTTP 實ProtocolBuffer集2.5. 總2.4.2SSLTLS 支2.4.3HTTP 實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 候就確定你的而應用程序基于哪套API 的API提供了很多重要的傳輸方式 另一種 替換掉幾行構(gòu)造方法的代碼。此外2.3基者鏈模式的事件模2.3基者鏈模式的事件模 針對 ChannelEventChannelPipeline中的ChannelHandler來處理。pipeline實現(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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論