下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、netty教程一part2創(chuàng)建channel連接- java開發(fā)java經(jīng)驗 技巧netty 教程一part2創(chuàng)建 channel 連接木文由importnew劉海波 翻譯自seeallhearall.blogspoto歡迎加入翻譯小組。轉載請見文 末要求。本文是netty教程的第二篇。channel不是直接被創(chuàng)建的,而是通過channelfactory來創(chuàng)建。channelfactory 有2種類別,一種用來實現(xiàn)客戶端channel,另一種用于服務器端的channel。 對于這2種分類,都有不同的實現(xiàn)類來處理相應的i/o通訊協(xié)議: tcp?nlo?channels:?nioclientsoc
2、ketchannelfactory?>fu?nioscrvcrsockctchannclfactory udp?nio?channels:?niodatagramchannelfactory tcp?oio?channels:?oioclientsocketchannelfactory 和oioserversocketchannelfactory udp?oio?channels:?oiodatagramchannelfactoryudp的channelfactory在客戶端和服務器端的實現(xiàn)相同的,因為udp是無連接 i辦議。還冇其他2種類型: http?客戶端:?httptunneli
3、ngclientsocketchannelfactory:?這個 channelfactory 能 夠方便地生成channel用于通過指定的netty?servlet來?連接netty服?務器。 local?channels:?defaultlocalclientchannelfactory?和?defaultlocalserverchannelfactory?分別是客丿端和服務器端in-vm類?型的 channel組?件,這種channel貌似是網(wǎng)絡channel實際上是在同一個jvm屮來處理 調(diào)川。這樣在某些情況下,木地請求可以通過統(tǒng)一的channel抽象接口被分發(fā)、處 理。在本篇闿客中主
4、要涉及tcp?nto?channel, ?但是要注意創(chuàng)建不同 channelfactory的方式上有細微的弟別。tcp?n10?channelfactory的構造方法使用相同類型的參數(shù),述冇一些重載方法。 基本上,這個factory需?要2個?線程池/executors: boss線程:由這個線程池提供的線程是boss種類的,用于創(chuàng)建、連接、綁定socket, 然后把這些socket傳?給worker線程池。在服務器端每個監(jiān)聽的socket都?冇一個boss 線?程來處理。在客戶端,只有一個boss線程來處理所有的socketo worker線程:worker線?程執(zhí)行所有的異步i/o。?他們
5、不是通用的線程,開發(fā)人員 需耍注意不要把與具不同的任務賦給線程,這可能導致線程被阻塞、無法處理他們 真正關心的任務,反過來會導致死鎖和一些莫名其妙的性能問題。在客戶端只有一個boss線程,為什么nioclicntsockctchemnclfeictory還需要 一個 executors?1. boss線程能夠被延遲加載,而h沒冇任務需要處理的時候可以被釋放,但是在線程 池屮保留少量的線程比在需要的時候創(chuàng)建一個新的線程、然示在空閑的時候銷毀它 更有效率。2. 還有可能多個不同的channelfactory被創(chuàng)建,應該訃這些channelfactory共用一個 線程池,而不是每個工廠獨享一個線程池
6、。因為nio?channelfactory是唯一可以杲步的處理socket連接、服務器端socket 的綁定,所以是唯一使用boss線?程池的channelfactoryo ?其他的種類有的使 用虛擬連接(local),有的是同步的連接(010) ?或者無狀態(tài)連接(udp)。 ilttptuncl ingclicntsockctcharrnclfactory 是客戶端 socket?charrnclfactory 的簡單封裝,是否使用boss線程是可選的,而月.也沒給它配置boss線程。關于channelfactory需要注意:在netty中處理邏輯的過程中,channelfactory 需要
7、申請資源,包括線程池。如果使用channelfactory之?后,一定要調(diào)用它的 rel easeexternal resources ()方?法來保證它申請的所冇資源被釋放??倆,發(fā)送東西到一個監(jiān)聽狀態(tài)的服務器:1. 創(chuàng)建一個 channelo2. 將channel連接到遠程監(jiān)聽的socket<>3. 調(diào)丿ij channel 的 write(object?message)方法。傳對象到channel很靈活?不是如此,如果按照下面的方式做會出現(xiàn)什么?channcl. write (ncwdatc();netty會拋出這個異常:java.lang.illegalargumentex
8、ception: unsupported message type: class java. util. date那支持什么樣的對象呢? channelbuffero但是channel有一個叫做pipeline 的構造器(準確的說是channclpipclinc) o 一個pipeline是一組攔截器組成 的,這些攔截器能夠處理和轉換傳給他們的值。當一個攔截器處理完成后,處理 后的值會被傳給下一個攔截器。這些攔截器被稱作channelhandlero pipeline 會嚴格保證channel handl er實例的順序。通常',第一個channel handl er會?接 收一個原始的channelbuffer,而最后一個channelllandler (被稱作sink)會 任何轉給它的東西輸出。在pipeline的某個流程小,你可以實現(xiàn)一個 channelhandler來做些有用的操作。channelhandler只是一個標識性接口,沒 有任何方法,因此處理器的實現(xiàn)很靈活,但是任何一個處理器都需要和應或者轉 發(fā)channel event (這里有很多專業(yè)的術語)。這個channelevent又是什么鬼東西呢?在這兩段落屮,把channelevent當做一 個含有channelbuffer的包裹。至于channelbuffer
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- QC/T 1210-2024汽車防夾系統(tǒng)
- GB/T 35601-2024綠色產(chǎn)品評價人造板和木質地板
- 工作總結之護士職業(yè)道德總結
- 工作總結之地鐵實習總結2000字
- 電工電子技術(第3版) 課件 3.4 變壓器結構與工作原理
- 公司自查報告-企業(yè)管理
- 《讓成交變得更輕松》課件
- 《計算機應用研究》課件
- 八年級《列夫·托爾斯泰》課件
- 《機械制造基礎》課件 汪曉云 模塊5-8 機床夾具的基礎知識- 機械裝配工藝的基礎知識
- 幼兒園繪本故事:《親愛的雪人》 課件
- 一年級語文上冊專項復習(口語交際、看圖寫話)課件
- 最新Unit-8-How-do-you-make-a-banana-milk-shake-全單元教案
- 機械制造有限公司組織架構圖模板
- T-SDDA 0002-2021 住宅裝飾裝修工程質量驗收標準
- 加油站觸電現(xiàn)場處置方案
- 承德建龍265m2燒結機工藝梳理
- 《現(xiàn)代漢語詞匯》PPT課件(完整版)
- 紅色校園文化建設研究報告(正式)
- 小學語文教師晉高級職稱答辯題
- 門診、住院業(yè)務流程和數(shù)據(jù)流
評論
0/150
提交評論