日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

詳解Java Socket通信封裝MIna框架

瀏覽:204日期:2022-08-11 09:47:47
目錄核心類各個擊破IoServiceIoFilterIoHandler總結核心類

IoService :Mina中將服務端和客戶端都看成是服務,這里提供統一接口IoService,這個接口的作用就是用來處理套接字機制。也正是IoService來監聽消息返回消息這些步驟,可以說IoService就是我們Mina中核心

IoProcessor:這個接口在另一個線程上,負責檢查是否有數據在通道上讀寫,也就是說它也擁有自己的Selector,這是與我們使用JAVA NIO 編碼時的一個不同之處,通常在JAVA NIO 編碼中,我們都是使用一個Selector,也就是不區分IoService與IoProcessor 兩個功能接口。另外,IoProcessor 負責調用注冊在IoService 上的過濾器,并在過濾器鏈之后調用IoHandler

IoFilter : 定義了一些攔截器 , 和我們web中攔截器一樣,用來橫向攔截處理一些全局的操作(日志處理,編碼處理)。其中我們必須注意的是加解密消息。作為一個好的框架肯定是有默認的攔截器的(TextLineCodecFactory )。默認攔截器可以叫消息強制轉換為String類型。畢竟String最通用

IoHandler : 這個是我們處理消息的邏輯,前面的攔截器只是在接受是進行一些驗證、翻譯的功能。拿到數據之后我們需要做的事情就是在IoHandler中

各個擊破IoService

首先我們已服務端NioSocketAcceptor為列,看看我們的服務類之間的結構依賴關系

詳解Java Socket通信封裝MIna框架

IoService是服務的鼻祖,無論在我們看來的服務端還是客戶端都得繼承它(間接繼承)。在IoService中我們會定義我們消息的處理過濾器(上文的攔截器),消息處理的業務類。在上文簡介中我們知道,這一步其實是IoProcessor來完成,那么IoProcessor在什么出現呢。比如Mina框架中用來創建服務端類NioSocketAcceptor。他直接繼承了AbstractPollingIoAcceptor。而AbstractPollingIoAcceptor類中根據參數創建了我們需要的IoProcessor.從而我們有了IoProcessor就可以執行消息間的通信了。

詳解Java Socket通信封裝MIna框架

所以過濾器、處理器實在我們服務啟動之前配置好的。一旦啟動成功就無法再修改了。我們服務端NioSocketAcceptor通過bind方法就可以綁定到指定端口上。我們這里的綁定實現了多態綁定。我們可以綁定多個服務。

/*** {@inheritDoc}*/@Overridepublic final void bind(Iterable<? extends SocketAddress> localAddresses) throws IOException { if (isDisposing()) {throw new IllegalStateException('The Accpetor disposed is being disposed.'); } if (localAddresses == null) {throw new IllegalArgumentException('localAddresses'); } List<SocketAddress> localAddressesCopy = new ArrayList<>(); for (SocketAddress a : localAddresses) {checkAddressType(a);localAddressesCopy.add(a); } if (localAddressesCopy.isEmpty()) {throw new IllegalArgumentException('localAddresses is empty.'); } boolean activate = false; synchronized (bindLock) {synchronized (boundAddresses) { if (boundAddresses.isEmpty()) {activate = true; }}if (getHandler() == null) { throw new IllegalStateException('handler is not set.');}try { Set<SocketAddress> addresses = bindInternal(localAddressesCopy); synchronized (boundAddresses) {boundAddresses.addAll(addresses); }} catch (IOException | RuntimeException e) { throw e;} catch (Exception e) { throw new RuntimeIoException('Failed to bind to: ' + getLocalAddresses(), e);} } if (activate) {getListeners().fireServiceActivated(); }}

在上面我們可以看到bind最后是去激活對應的監聽器。我們一個IoServer處理一個線程中的消息。我們監聽器就是監聽線程內的消息。每一次的綁定都會有不同的監聽器、ioSession去專門處理消息之間的通信。我們可以通過IoSession設置一些請求數據完成數據的權限驗證。

在服務創建的時候我們正常需要設置IoSession的一些配置。通過getSessionConfig方法獲取IoSessionConfig。里面設置參數常用如下:

setReadBufferSize : 設置讀取數據的緩沖區大小 setMinReadBufferSize: 設置緩沖區最大值 setMaxReadBufferSize: 設置緩沖區最小值 setThroughputCalculationInterval: 設置通道計算時間 默認3s setIdleTime(IdleStatus status, int idleTime): status 設置是一方還是雙方 , idLetime 是超過多久就會進入空閑狀態

IoAcceptor acceptor=new NioSocketAcceptor(); acceptor.getSessionConfig().setReadBufferSize(2048); acceptor.getSessionConfig.setIdleTime(IdleStatus.BOTH_IDLE,10);IoFilter

在IoService中有獲取filter鏈的一個方法 DefaultIoFilterChainBuilder getFilterChain() , 我們需要做的就是定義過濾器,然后通過該方法獲取過濾鏈加入到請求鏈上。我們自定義過濾器也很簡單,只需要繼承IoFilterAdapter這個類就好了。

acceptor.getFilterChain().addLast('codec', new ProtocolCodecFilter(new TextLineCodecFactory( Charset.forName('UTF-8'),LineDelimeter.WINDOWS.getValue(),LineDelimiter. WINDOWS.getValue())) );

TextLineCodecFactory 這個類是Mina提供的編解碼工廠,這個工廠的特性是以換行符’rn’為結束通信的標志。也就是說如果我們傳遞消息沒有換行符,另外一段會繼續接受消息知道接受到’rn’才會接受,并把接受到的消息通過編解碼器轉到IoHandler層供業務層處理。(這里博主被坑在這里了)

IoHandler

到了這一步,我們的通信基本就已經完成了。剩下的事情已經和Mina基本沒多大關聯了。我們將在這里處理業務邏輯,使用到的就是Handler提供的接收消息和發送消息兩個功能。這里我們需要注意的是Handler提供messageReceived和messageSent并不是字面意思。前者就是消息的接受,但是后者并不是消息的發送。我們常用的發送消息是session.write方法。

總結

今天我們了解了Mina工作的流程,主要就是IoFilter和IoHandler實現消息的通信 。 千里之行始于足下,一點一點的進步。下面貼出一份總結的圖譜幫助我們理解Mina流程

詳解Java Socket通信封裝MIna框架

以上就是詳解Java Socket通信封裝MIna框架的詳細內容,更多關于Java Socket通信封裝MIna框架的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久高清免费| 日本一区二区高清不卡| 亚洲成a人片| 成人国产综合| 福利片在线一区二区| 日韩成人免费| 91精品一区二区三区综合在线爱| 欧美一级鲁丝片| 日韩高清欧美| 午夜影院欧美| 蜜臀久久久99精品久久久久久| 亚洲香蕉视频| 国产精品亚洲综合在线观看| 成人在线视频免费看| 四虎成人精品一区二区免费网站| 亚洲一区av| 国产亚洲一区| 国产精品17p| 国产精品久久久久久久久久10秀 | 夜久久久久久| 亚洲精选av| 欧美日韩va| 成人在线超碰| 在线观看精品| 国产视频一区三区| 深夜福利一区| 久久精品系列| jiujiure精品视频播放| 在线观看视频免费一区二区三区| 国产情侣一区在线| 水蜜桃久久夜色精品一区| 久久精品国产68国产精品亚洲| 午夜一级在线看亚洲| 国产精品中文字幕制服诱惑| 日韩免费在线| 影音先锋久久精品| 美腿丝袜在线亚洲一区| 99精品视频在线| 亚洲精品美女91| 久久亚洲国产精品尤物| 欧美不卡视频| 欧美日韩一区二区三区四区在线观看| 97国产精品| 最新亚洲国产| 国产精品99一区二区三| 久久激五月天综合精品| 激情欧美日韩一区| 国产精品毛片在线| 国产精品v亚洲精品v日韩精品| 伊人久久在线| 日韩一区网站| 日韩免费视频| 日本三级亚洲精品| 久久五月天小说| 日产欧产美韩系列久久99| 91看片一区| 日韩成人av影视| 欧美中文一区二区| 国产美女撒尿一区二区| 欧美日韩精品一区二区视频| 最新亚洲国产| 日韩在线高清| 日韩精品高清不卡| 91九色精品| 精品久久97| 亚洲精品大片| 欧美~级网站不卡| 欧美精品导航| 亚洲专区视频| 中文字幕系列一区| 国产精品久一| 在线看片日韩| 久久三级视频| 国产精选久久| 蜜桃免费网站一区二区三区| 精品久久久中文字幕| 视频一区中文字幕精品| 久久精品免费一区二区三区| 国产精品s色| 亚洲精品福利| 99在线精品视频在线观看| 中文字幕在线看片| 国产情侣久久| 蜜臀av一区二区三区| 亚洲91久久| 国产一区二区三区亚洲| 久久激情五月激情| 日韩中文字幕一区二区三区| 最新中文字幕在线播放| 欧美日韩国产一区二区在线观看| 亚洲一区区二区| 日韩在线观看不卡| 精品美女在线视频| 国产精品激情电影| 国产毛片精品久久| 日本欧美在线| 中文字幕日本一区二区| 亚洲免费中文| 悠悠资源网久久精品| 婷婷激情久久| 久久国产亚洲| 亚洲播播91| 日韩深夜视频| 日韩在线视频精品| 亚洲日本网址| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 欧美aaaaaa午夜精品| 国产亚洲一卡2卡3卡4卡新区| 影音先锋久久精品| 热久久久久久久| 男人天堂欧美日韩| 亚洲欧美日本视频在线观看| 一区免费在线| 日韩视频一区二区三区在线播放免费观看| 日韩精品一区二区三区免费观影 | 欧美三区不卡| 日韩国产在线不卡视频| 午夜精品福利影院| 一区二区电影| 亚洲日本三级| 亚洲欧美网站在线观看| 亚洲精品第一| 日韩精品一区二区三区免费视频| 天堂久久一区| 欧美日韩国产一区二区在线观看| 日韩精品国产欧美| 日本色综合中文字幕| 国产精品综合色区在线观看| 国产精品chinese| 精品一区二区三区中文字幕在线| 精品国产精品国产偷麻豆| 精品欠久久久中文字幕加勒比| 国产成人久久精品一区二区三区| 国产91欧美| 亚洲成人二区| 亚洲欧洲午夜| 免费成人在线影院| 日本少妇精品亚洲第一区| 国产精品久久久免费| 精品不卡一区| 香蕉精品久久| 亚洲一区二区三区高清不卡| 中文字幕日韩亚洲| 国产欧美日韩一级| 久久免费视频66| 国产 日韩 欧美一区| 亚洲美洲欧洲综合国产一区| 日本伊人久久| 国产在线视频欧美一区| 国产在线成人| 亚洲精品乱码久久久久久蜜桃麻豆 | 亚洲综合激情在线| 国产精品白丝一区二区三区| 国产成人调教视频在线观看| 久久久精品五月天| 久久亚洲国产精品一区二区| 日韩av网站在线观看| 成人在线免费观看91| 蜜臀91精品国产高清在线观看| 午夜在线视频观看日韩17c| 日本视频中文字幕一区二区三区| 黄色欧美在线| 午夜精品网站| 91成人在线精品视频| 国产拍在线视频| 另类国产ts人妖高潮视频| 国产精品一区二区三区美女| 久久久成人网| 日韩和欧美的一区| 成人国产精品久久| 亚洲欧美日韩国产一区| 国产精品入口久久| 日本精品影院| 日韩激情一区二区| 日本免费久久| 日韩在线视频一区二区三区| 成人一区而且| 蜜臀a∨国产成人精品| 久久精品国产在热久久| 99在线|亚洲一区二区| 国产精品分类| 在线午夜精品| 久久亚州av| 蜜芽一区二区三区| 精品一区二区三区中文字幕视频 | 亚洲伊人精品酒店| 国产福利片在线观看| 亚洲综合婷婷| 人人精品亚洲| 国产免费播放一区二区| 欧美1区免费| 国产精品**亚洲精品| 99riav1国产精品视频| 精品午夜久久| 免费看精品久久片| 韩国三级一区| 国产精品免费精品自在线观看| 99国产精品视频免费观看一公开| 韩国一区二区三区视频| 最新国产精品久久久|