mina

Mina工作原理分析

。_饼干妹妹 提交于 2019-12-22 15:10:17
Mina是Apache社区维护的一个开源的高性能IO框架,在业界内久经考验,广为使用。Mina与后来兴起的高性能IO新贵Netty一样,都是韩国人Trustin Lee的大作,二者的设计理念是极为相似的。在作为一个强大的开发工具的同时,这两个框架的优雅设计和不俗的表现,有很多地方是值得学习和借鉴的。本文将从Mina工作原理的角度出发,对其结构进行分析。 总体结构 Mina的底层依赖的主要是Java NIO库,上层提供的是基于事件的异步接口。其整体的结构如下: IoService 最底层的是IOService,负责具体的IO相关工作。这一层的典型代表有IOSocketAcceptor和IOSocketChannel,分别对应TCP协议下的服务端和客户端的IOService。IOService的意义在于隐藏底层IO的细节,对上提供统一的基于事件的异步IO接口。每当有数据到达时,IOService会先调用底层IO接口读取数据,封装成IoBuffer,之后以事件的形式通知上层代码,从而将Java NIO的同步IO接口转化成了异步IO。所以从图上看,进来的low-level IO经过IOService层后变成IO Event。 具体的代码可以参考org.apache.mina.core.polling.AbstractPollingIoProcessor的私有内部类Processor。

Mina2.0框架源码剖析(一)

陌路散爱 提交于 2019-12-22 10:07:30
整个框架最核心的几个包是: org.apache.mina.core.service, org.apache.mina.core.session, org.apache.mina.core.polling 以及 org.apache.mina.transport.socket 。 这一篇先来看 org.apache.mina.core.service 。第一个要说的接口是 IoService, 它是所有 IoAcceptor 和 IoConnector 的基接口 . 对于一个 IoService, 有哪些信息需要我们关注呢? 1 )底层的元数据信息 TransportMetadata ,比如底层的网络服务提供者( NIO,ARP,RXTX 等), 2 )通过这个服务创建一个新会话时,新会话的默认配置 IoSessionConfig 。 3 )此服务所管理的所有会话。 4 )与这个服务相关所产生的事件所对应的监听者( IoServiceListener )。 5 )处理这个服务所管理的所有连接的处理器 (IoHandler) 。 6 )每个会话都有一个过滤器链( IoFilterChain ),每个过滤器链通过其对应的 IoFilterChainBuilder 来负责构建。 7 )由于此服务管理了一系列会话,因此可以通过广播的方式向所有会话发送消息 , 返回结果是一个

Mina入门

﹥>﹥吖頭↗ 提交于 2019-12-20 05:30:31
一 :mina屏蔽了网络通信的一些细节,对sokcet进行封装,并且是NIO的一个实现框架,可以帮助我们快速的开发网络通信, 1.1:mima的工程流程 IOService接口 用户描述我们的客户端可服务端接口,其子类是connector和acceptor,分别用于描述我们的客户端和服务端IOproceser多线程环境来处理我们的连接请求流程 ioFilter提供数据的过来工作,包括编码,解码,日志等信息的过滤 Hanlder就是我们的业务对象,自定义的hanlder需要实现IOHandlerAcceptor。 1.2:mina的类结构 IOService :描述的是客户端和服务端连接的描述,常常用户接受和发送数据 1.2.1:执行过程 : 1.2.2:设计到的类 NIOSocketAcceptor 通信管理 IOseeeion :session管理 IoService :这个接口在一个线程上负责套接字的建立,拥有自己的Selector,监听是否有连接被建立。 IoProcessor :这个接口在另一个线程上,负责检查是否有数据在通道上读写,也就是说它也拥有自己的Selector,这是与我们使用JAVA NIO 编码时的一个不同之处,通常在JAVA NIO 编码中,我们都是使用一个Selector,也就是不区分IoService与IoProcessor 两个功能接口。另外

NIO、BIO、AIO的区别,及NIO的应用和框架选型

江枫思渺然 提交于 2019-12-13 15:19:11
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> AIO、BIO、NIO的区别 IO模型主要分类: 同步(synchronous) IO和异步(asynchronous) IO 阻塞(blocking) IO和非阻塞(non-blocking)IO 同步阻塞(blocking-IO)简称BIO 同步非阻塞(non-blocking-IO)简称NIO 异步非阻塞(synchronous-non-blocking-IO)简称AIO 1.BIO (同步阻塞I/O模式) 数据的读取写入必须阻塞在一个线程内等待其完成。 这里使用那个经典的烧开水例子,这里假设一个烧开水的场景,有一排水壶在烧开水,BIO的工作模式就是, 叫一个线程停留在一个水壶那,直到这个水壶烧开,才去处理下一个水壶。但是实际上线程在等待水壶烧开的时间段什么都没有做。 2.NIO(同步非阻塞) 同时支持阻塞与非阻塞模式,但这里我们以其同步非阻塞I/O模式来说明,那么什么叫做同步非阻塞?如果还拿烧开水来说,NIO的做法是叫一个线程不断的轮询每个水壶的状态,看看是否有水壶的状态发生了改变,从而进行下一步的操作。 3.AIO (异步非阻塞I/O模型) 异步非阻塞与同步非阻塞的区别在哪里?异步非阻塞无需一个线程去轮询所有IO操作的状态改变,在相应的状态改变后,系统会通知对应的线程来处理。对应到烧开水中就是

Apache camel send a simple message

眉间皱痕 提交于 2019-12-13 06:24:21
问题 I have a simply camel MINA server using the JAVA DSL, and I am running like the example documented here: Running Camel standalone and have it keep running in JAVA MINA 2 Component I am trying to create a sample application hosted at "mina:tcp://localhost:9991" (aka MyApp_B) that sends a very simple message to a server hosted at "mina:tcp://localhost:9990" (aka MyApp_A). I want is to send a simple message containing a String in the header (which is "Hellow World!") and with the address in the

Mina and Devise.secret_key was not set

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-11 02:00:02
问题 I'm trying to deploy my app with mina. When it starts to run migrations I got this error: -----> Migrating database rake aborted! Devise.secret_key was not set. Please add the following to your Devise initializer: config.secret_key = 'key here.......' Please ensure you restarted your application after installing Devise or setting the key. ......... In my devise initializer I have config.secret_key = ENV["SECRET_KEY_BASE"] How to add this key to my app? Are secret_key_base and secret_key

dubbo中的那些“坑”(1)

社会主义新天地 提交于 2019-12-09 11:35:32
同事刘阳使用dubbo服务器中配置mina作为网络传输层,发现大并发情况下,解码发生如下异常 014-12-01 18:00:44,652 [DubboServerHandler-10.1.19.13:20880-thread-164] WARN alibaba.dubbo.remoting.exchange.codec.ExchangeCodec (ExchangeCodec.java:596) - [DUBBO] Fail to encode response: Response [id=8119, version=2.0.0, status=40, event=false, error=Fail to decode request due to: RpcInvocation [methodName=null, parameterTypes=null, arguments=null, attachments={input=242}, headers=null], result=null], send bad_response info instead, cause: null, dubbo version: 2.5.5, current host: 127.0.0.1 java.lang.NullPointerException at com.alibaba.dubbo.rpc

Netty学习一:基本知识

非 Y 不嫁゛ 提交于 2019-12-09 11:06:05
1. Netty基础知识 1.1 Netty出现的原因 Java NIO 太难用,存在BUG(如Epoll-Bug) 基于第一点,大多数高性能服务器被C和C++盘踞 同样基于第一点,Java NIO编程门槛高 业界其他的NIO框架不成熟 1.2 Netty Netty是由JBOSS提供的一个Java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。 也就是说,Netty 是一个基于NIO的客户、服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。Netty相当简化和流线化了网络应用的编程开发过程,例如,TCP和UDP的socket服务开发。 “快速”和“简单”并不意味着会让你的最终应用产生维护性或性能上的问题。Netty 是一个吸收了多种协议的实现经验,这些协议包括FTP,SMTP,HTTP,各种二进制,文本协议,并经过相当精心设计的项目,最终,Netty 成功的找到了一种方式,在保证易于开发的同时还保证了其应用的性能,稳定性和伸缩性. 1.3 特性 1.3.1 设计 统一的API,适用于不同的协议(阻塞和非阻塞) 基于灵活、可扩展的事件驱动模型 高度可定制的线程模型 可靠的无连接数据Socket支持(UDP) 1.3.2 性能 更好的吞吐量,低延迟

Deploy subdirectory with mina

陌路散爱 提交于 2019-12-07 15:36:21
问题 Is there a way to deploy a subdirectory of the repo through Mina? I've seen people using custom deploy strategy to achieve this with Capistrano and I would like to be able to do it with Mina. 回答1: Please check out this repo, https://github.com/thopham/mina-rsync, stage-sub-folder branch. Please see also my gist, https://gist.github.com/xlogan/10519195 回答2: I was able to fix this by wrapping a number of the setps in a in_directory './rails' do end block like this (my rails app is under the

Apache Mina SFTP Server Side channel Listener for incoming files

Deadly 提交于 2019-12-06 13:39:03
问题 I am trying to figure out how to implement Server side listeners for a Java based SFTP server to alert me to an incoming file transfer. I'm using the latest version of Apache Mina. My scenario is for my server to simply receive a file from a client and do "something" to the file before storing it. That something could be error checking / rules validation / forwarding the contents elsewhere. The thing is I want to do that before it is saved on my system. I'm having difficulty with the