




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quá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)的一個小警 1.7.2. 第一個解決辦 1.7.3. 第二個解決辦 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實ProtocolBuffer集2.5. 總前1問題提常常使用2.4. 2.4.1. 編碼框2.4.2SSLTLS 支2.4.3HTTP實ProtocolBuffer集2.5. 總前1問題提常常使用HTTP客戶從WEB服務(wù)器上獲不適用通用的 的 多2解決方 高 Chapter1開1.1. 開始之. 1.3. Received. . . 1.7處理基于流的傳 1.7.1套接字緩存(SocketBuffer)的一個小警 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. 編寫一個 Discard服個 , , 個 當(dāng)一個異常因為I/O 錯誤由Netty 拋出,或者由在處理事件過程中,handler 的實現(xiàn)拋出了異常 ,并且對應(yīng)channel應(yīng)已經(jīng)實現(xiàn)了 DISCARD 服務(wù)的一半。接下來需要寫 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、后關(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ū)別。不過,這個 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 來減少你的應(yīng)用程序的復(fù)雜度。 例如, 你可以拆分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應(yīng)該修TimeC
11、 nt ChannelPipelineFactory 實現(xiàn) API手冊以獲bootstrap.setPipelineFactory(new publicChannelPipelinegetPipeline() newTimeC ifytes()returnreturn此外,Netty 提供了一些“開箱即用”此外,Netty 提供了一些“開箱即用” net針對的是基于行的文本協(xié)1.8. POJO 、可復(fù)用。在這個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)在唯一缺少的就是編了。 這個編應(yīng)該是一個把 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. 關(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),這可不是瑣碎的小事兒一樁。還好,有一個辦法,那就ChannelGroupChannelF
15、uturefuture=bootstrap.connect(.); ifs()future.getCause().pr ChannelGroup代表打開Channel的集合JavacollectionAPI的特殊擴展。如果一個ChannelGroup代表打開Channel的集合JavacollectionAPI的特殊擴展。如果一個Channel入了 ChannelGroup, 然后這個 Channel 被關(guān)閉了, 那么這個關(guān)閉的 Channel 會自動從它的ChannelGroup 中移除。你可以對一個組執(zhí)行一個操作,卻作用于所有屬于同一個組的Channel。比如你可以在停止服務(wù)器的時候,關(guān)閉
16、一ChannelGroup內(nèi)所有的ChannelTimeServerHandler ChannelGroup( TimeServer.allChannels)添加一個新的ChannelGroup 是線程安全的這下所有的啟用Channel都自動publicclassTimeServer publicicvoidmain(Stringargs)throwsException Channelchannel=bootstrap.bind(.); ServerBootstrap的bind 方法返回了一個服 ServerBootstrap的bind 方法返回了一個服務(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 實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 候就確定你的而應(yīng)用程序基于哪套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)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育政策在提升農(nóng)村地區(qū)教學(xué)質(zhì)量中的實踐探索
- 教育機器人技術(shù)的倫理挑戰(zhàn)與應(yīng)對策略
- 2025屆山東省濟南市回民中學(xué)高一物理第二學(xué)期期末調(diào)研試題含解析
- 創(chuàng)新教育模式下的教育游戲設(shè)計-兼談寓教于樂的探索與實踐
- 數(shù)字化教育時代的倫理挑戰(zhàn)學(xué)生數(shù)據(jù)隱私保護策略
- 國際教育技術(shù)合作的策略與方法探討
- 教育游戲化提升STEM學(xué)習(xí)體驗的有效途徑
- 商業(yè)策略與投資視角下的干細胞教育市場分析
- 個性化教育的數(shù)字化轉(zhuǎn)型-利用數(shù)據(jù)分析進行更高效的教學(xué)管理
- 基礎(chǔ)護士眼科考試題庫及答案
- 溝通力培訓(xùn)課件
- 2025-2030中國光伏組件回收技術(shù)經(jīng)濟性分析與政策激勵效果報告
- 住院患者健康宣教的重要性
- 街區(qū)防災(zāi)規(guī)劃方案(3篇)
- 中國汽車傳感器行業(yè)發(fā)展趨勢及發(fā)展前景研究報告2025-2028版
- 師德師風(fēng)校長培訓(xùn)
- 城市軌道交通機電技術(shù)專業(yè)教學(xué)標(biāo)準(zhǔn)(高等職業(yè)教育??疲?025修訂
- 《智能機器人技術(shù)與應(yīng)用》高職人工智能工業(yè)機器人專業(yè)全套教學(xué)課件
- 2025年江西省中考數(shù)學(xué)試卷真題(含標(biāo)準(zhǔn)答案)
- 2025年中國郵政集團有限公司上海市分公司招聘筆試備考試題含答案詳解
- 2025年物聯(lián)網(wǎng)技術(shù)在智能養(yǎng)老中的老人健康監(jiān)測與生活服務(wù)保障報告
評論
0/150
提交評論