iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何解析Mina代码
  • 920
分享到

如何解析Mina代码

2023-06-17 14:06:28 920人浏览 薄情痞子
摘要

小编给大家分享一下如何解析Mina代码,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!首先,Mina是什么?能帮我们做什么?我研究一个新技术的时候,首先问的就是这样

小编给大家分享一下如何解析Mina代码,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

首先,Mina是什么?能帮我们做什么?我研究一个新技术的时候,首先问的就是这样的问题。我个人的理解就是Mina是一个关注于通讯层的框架,任何需要底层通讯的应用,都可以使用它。更详细准确的介绍,请看官方网站Http://mina.apache.org/

Mina的优势:

NIO实现,无需太多线程。可以处理的并发量更大。

对于应用层来说,编程更方便。

好了废话少说,先看个Demo吧

public static void main(String[] args) throws ioException {      // 创建Acceptor       IoAcceptor acceptor = new NioSocketAcceptor();       // 注册filter      acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );     acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));       // 注册你的业务处理类       acceptor.setHandler( new TimeServerHandler() );       // 配置参数       acceptor.getSessionConfig().setReadBufferSize( 2048 );      acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );       // 让Acceptor在绑定的地址侦听       acceptor.bind( new InetSocketAddress(PORT) );  }

IoHandler

public interface IoHandler {        void sessionCreated(iOSession session) throws Exception;        void sessionOpened(IoSession session) throws Exception;        void sessionClosed(IoSession session) throws Exception;        void sessionIdle(IoSession session, IdleStatus status) throws Exception;        void exceptionCaught(IoSession session, Throwable cause) throws Exception;        void messageReceived(IoSession session, Object message) throws Exception;        void messageSent(IoSession session, Object message) throws Exception;  }

首先new一个Acceptor,可以看出,Acceptor是我们要操作的服务器对象。然后,向Acceptor里注册了两个filter。filter的概念类似于WEB服务器里的filter。filter处于你的业务端代码和具体的发送数据代码之间,它负责过滤或者说处理传递过来的信息。业务处理代码,写在Handler里。

代码结构相当的清晰。我们需要填写的业务代码就是 Handler 和 Filter了。它们俩很相似,但是在概念上是有区别的。filter事实上主要是处理底层的通信字节流,通信协议等,一般跟业务逻辑没什么关系。Handler是专门暴露给应用开发者,用来填写业务处理代码的。

看看下面的图便知道了

如何解析Mina代码

Mina暴露给开发者的接口主要是IoAcceptor(服务器端)或者ioconnector(客户端)。Mina内部具体是怎么实现侦听,处理连接的呢?我们先来介绍一下Mina的方法哲学或者说术语吧。

IoSession

IoSession: IoSession是一个客户连接的抽象,整个通讯框架可以说,都是围绕着IoSession工作的。

IoAcceptor: 初始化服务器,用的就是它

IoProcessor: 负责处理IoSession,包括创建,移除,读写事件的处理

IoFilter: 过滤消息或者说消息处理(通讯层的)

IoHandler: 消息处理(应用逻辑层的)

通讯层的核心类,事实上是IoAcceptor,IoProcessor,IoSession。在这里我们只分析IoAcceptor模式,也就是服务器端的代码。客户端的代码与此类似,大家可以自己研究。

首先,调用IoAcceptor.bind()方法时,服务器已经初始化完毕,这时服务器就在指定的端口上开始侦听客户端发来的连接请求。

当IoAcceptor侦听到客户端请求时,它就会把这个请求交给IoProcessor进行处理。然后IoAcceptor回去继续侦听。显然,IoAcceptor的工作流程就是 侦听 --> 传递请求 --> 继续侦听。

IoProcessor得任务则是处理这些连接的IO事件。显然IoProcessor不可能和IoAcceptor在同一个线程里运行。他们两个分工不同,可以并发执行。Mina内部事实上维护了一个IoProcessor对象池,对象池的默认大小是CPU个数+1.也就是说,如果你的机器是4核的,可能就有5个IoProcessor(可以理解为线程)同时工作。

看看下面的示意图吧,一图胜千言:

如何解析Mina代码

在这里主要分析IoAcceptor 和 IoProcessor。

IoAcceptor比较简单,它的核心代码都在AbstractPollingAccetor里,轮询代码在它的内部类Accetpor里的run方法里。请看下面的UML图:

如何解析Mina代码

IoProcessor比较复杂,它的主要代码是在AbstractPollingProcessor里的,轮询代码在它的内部类Processor里的run方法实现。值得注意的是,IoAcceptor所持有的IoProcessor引用,事实上是一个对象池。对象池负责调度某个Processor来处理请求。下面是UML类图

如何解析Mina代码

以上是“如何解析Mina代码”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: 如何解析Mina代码

本文链接: https://www.lsjlt.com/news/289467.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何解析Mina代码
    小编给大家分享一下如何解析Mina代码,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!首先,Mina是什么能帮我们做什么我研究一个新技术的时候,首先问的就是这样的问...
    99+
    2023-06-17
  • 浏览器是如何解析代码的
    这篇文章主要介绍浏览器是如何解析代码的,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!浏览器是如何解析代码的?解析HTMLHTML是逐行解析的,浏览器的渲染引擎会将HTML文档解析并转...
    99+
    2024-04-02
  • 如何对Python代码进行全解析
    今天就跟大家聊聊有关如何对Python代码进行全解析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Python代码可以使用户避免过分的语法的羁绊而将精力主要集中到所要实现的程序任务上...
    99+
    2023-06-17
  • 如何解析SAP FICO定义国家代码
    这篇文章给大家介绍如何解析SAP FICO定义国家代码,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在SAP中,几乎不需要此事务,因为几乎所有国家/地区都在标准安装中定义。事务码:OY01路径:SAP NetWeave...
    99+
    2023-06-05
  • 如何用源代码分析FileZilla
    这期内容当中小编将会给大家带来有关如何用源代码分析FileZilla,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。FileZilla是一种快速、可信赖的FTP客户端以及服务器端开放源代码程式,具有多种特色...
    99+
    2023-06-16
  • 如何用Python代码做一个英文解析器
    如何用Python代码做一个英文解析器,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义...
    99+
    2023-06-17
  • 【代码详解】nerf-pytorch代码逐行分析
    目录 前言run_nerf.pyconfig_parser()train()create_nerf()render()batchify_rays()render_rays()raw2outpu...
    99+
    2023-09-01
    pytorch 深度学习 python
  • 如何理解Typescript代码
    这篇文章主要介绍“如何理解Typescript代码”,在日常操作中,相信很多人在如何理解Typescript代码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解Type...
    99+
    2024-04-02
  • 如何解析Python源代码组织的相关操作
    这篇文章将为大家详细讲解有关如何解析Python源代码组织的相关操作,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Python源代码的组织要分析Python源码,首先当然要获得Python源...
    99+
    2023-06-17
  • 如何理解Redis 代码库源码
    本篇文章给大家分享的是有关如何理解Redis 代码库源码,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Redis是一个用ANSI C &nbs...
    99+
    2024-04-02
  • Android内核代码wake_up源码解析
    目录内核中通常用法:wake_up 的源码:func 赋值过程wait_queue_head 和 wait_queue_entry 数据结构两种等待任务 wait_queue_ent...
    99+
    2023-03-08
    Android内核代码wake_up Android wake_up源码解析
  • python装饰器代码解析
    目录1.装饰器通用模型2.多个装饰器装饰的函数执行3.带参数的装饰器4.类装饰器1.装饰器通用模型 def wrapper(fn):     def inner(*args, **k...
    99+
    2024-04-02
  • Python 装饰器代码解析
    前言: 以往看到我博客的小伙伴可能都知道,我的前言一般都是吐槽和讲废话环节,哈哈哈哈。今天难得休息,最近可真是太忙了,博主已经连续一年都在996了,所以最近没怎么学习新东西,只能回顾...
    99+
    2024-04-02
  • 如何剖析Python if语句源代码
    如何剖析Python if语句源代码,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Python if语句在Python编程语言环境中有很多应用的地方,不少的程序员都不能够很顺利...
    99+
    2023-06-17
  • 浅析如何将TypeScript转为GoLang代码
    近年来,TypeScript 和 GoLang 都成为了非常流行的编程语言。TypeScript 是微软推出的一种静态类型语言,可编译为 JavaScript。它具备了强类型检查、类、接口、泛型等特性,提高了代码的可读性和可维护性。而 Go...
    99+
    2023-05-14
  • 如何进行FileZilla的源代码分析
    这篇文章将为大家详细讲解有关如何进行FileZilla的源代码分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。FileZilla是一种快速、可信赖的FTP客户端以及服务器端开放源代码程式,...
    99+
    2023-06-16
  • 浅析如何在Gitee上更新代码
    随着开源软件的流行,越来越多的开发者选择使用代码托管服务,一种流行的服务是Gitee。Gitee提供了一个简便的方式来托管和共享代码,但许多人仍然不知道怎么更新Gitee仓库中的代码。在本文中,我们将讨论如何在Gitee上更新代码。第一步:...
    99+
    2023-10-22
  • win10720错误代码如何解决
    本篇内容主要讲解“win10720错误代码如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“win10720错误代码如何解决”吧!win10720错误代码解决方法:打开“控制面板”随后点击“...
    99+
    2023-07-01
  • Win10错误代码怎么解析
    要解析Win10错误代码,您可以通过以下步骤进行操作: 确定错误代码:当您遇到错误时,Windows通常会显示错误代码。请记下这...
    99+
    2023-10-22
    Win10
  • JavaIterator迭代器与foreach循环代码解析
    目录一、 Iterator迭代器接口1. 使用 Iterator 接口遍历集合元素2. Iterator接口的方法3. 迭代器的执行原理3.1 代码演示3.2 代码执行过程解析4. ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作