电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

詳解Java Socket通信封裝MIna框架

瀏覽:112日期: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
相關文章:
主站蜘蛛池模板: 制冷采购电子商务平台——制冷大市场 | 快干水泥|桥梁伸缩缝止水胶|伸缩缝装置生产厂家-广东广航交通科技有限公司 | ICP备案查询_APP备案查询_小程序备案查询 - 备案巴巴 | 书法培训-高考书法艺考培训班-山东艺霖书法培训凭实力挺进央美 | 磁力链接搜索神器_BT磁力狗_CILIMAO磁力猫_高效磁力搜索引擎2024 | 橡胶电子拉力机-塑料-微电脑电子拉力试验机厂家-江苏天源 | 岩棉板|岩棉复合板|聚氨酯夹芯板|岩棉夹芯板|彩钢夹芯板-江苏恒海钢结构 | 活性炭-蜂窝-椰壳-柱状-粉状活性炭-河南唐达净水材料有限公司 | 镀锌方管,无缝方管,伸缩套管,方矩管_山东重鑫致胜金属制品有限公司 | 天津云仓-天津仓储物流-天津云仓一件代发-顺东云仓 | 同学聚会纪念册制作_毕业相册制作-成都顺时针宣传画册设计公司 | 合肥抖音SEO网站优化-网站建设-网络推广营销公司-百度爱采购-安徽企匠科技 | 学叉车培训|叉车证报名|叉车查询|叉车证怎么考-工程机械培训网 | 首页 - 张店继勇软件开发工作室| 解放卡车|出口|济南重汽|报价大全|山东三维商贸有限公司 | 偏心半球阀-电动偏心半球阀-调流调压阀-旋球阀-上欧阀门有限公司 | 喷码机,激光喷码打码机,鸡蛋打码机,手持打码机,自动喷码机,一物一码防伪溯源-恒欣瑞达有限公司 | 珠海网站建设_响应网站建设_珠海建站公司_珠海网站设计与制作_珠海网讯互联 | 517瓜水果特产网|一个专注特产好物的网站 | HV全空气系统_杭州暖通公司—杭州斯培尔冷暖设备有限公司 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 广东高华家具-公寓床|学生宿舍双层铁床厂家【质保十年】 | 广州办公室设计,办公室装修,写字楼设计,办公室装修公司_德科 | 扒渣机厂家_扒渣机价格_矿用扒渣机_铣挖机_撬毛台车_襄阳永力通扒渣机公司 | 沈阳液压泵_沈阳液压阀_沈阳液压站-沈阳海德太科液压设备有限公司 | 上海APP开发-APP制作-APP定制开发-上海APP开发制作公司-咏熠科技 | 脱硝喷枪-氨水喷枪-尿素喷枪-河北思凯淋环保科技有限公司 | 水环真空泵厂家,2bv真空泵,2be真空泵-淄博真空设备厂 | 蜗轮丝杆升降机-螺旋升降机-丝杠升降机厂家-润驰传动 | 天津次氯酸钠酸钙溶液-天津氢氧化钠厂家-天津市辅仁化工有限公司 | 防堵吹扫装置-防堵风压测量装置-电动操作显示器-兴洲仪器 | 钢制拖链生产厂家-全封闭钢制拖链-能源钢铝拖链-工程塑料拖链-河北汉洋机械制造有限公司 | 玄米影院| 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库-首页-东莞市傲马网络科技有限公司 | 蒜肠网-动漫,二次元,COSPLAY,漫展以及收藏型模型,手办,玩具的新媒体.(原变形金刚变迷TF圈) | 叉车电池-叉车电瓶-叉车蓄电池-铅酸蓄电池-电动叉车蓄电池生产厂家 | 防渗膜厂家|养殖防渗膜|水产养殖防渗膜-泰安佳路通工程材料有限公司 | 双菱电缆-广州电缆厂_广州电缆厂有限公司| 酵素生产厂家_酵素OEM_酵素加盟_酵素ODM_酵素原料厂家_厦门益力康 | 企业微信营销_企业微信服务商_私域流量运营_艾客SCRM官网 | 隧道风机_DWEX边墙风机_SDS射流风机-绍兴市上虞科瑞风机有限公司 |