高性能网络服务框架Mina

合集下载

Servlet,Tomcat,Jetty,Netty,Mina对比

Servlet,Tomcat,Jetty,Netty,Mina对比

Servlet,Tomcat,Jetty,Netty,Mina对⽐Servlet, Tomcat, Jetty, Netty,Mina结论先说结论吧: Servlet是⼀种Java EE规范,Tomcat & Jetty是Servlet容器,Tomcat包含了Servlet。

Servlet本⾝并不能处理外部请求,需要Servlet容器的配合,Netty和MINA是⽹络框架,我们可以使⽤Netty造出⾃⼰类似Tomcat的web服务器。

简单的关系的话 Tomcat = Jetty > Netty & MINA > Servlet。

Servletwiki上的定义:Servlet 是⽤ Java 编写的服务器端程序。

其主要功能在于交互式地浏览和修改数据,⽣成动态 Web 内容。

狭义的 Servlet 是指Java 语⾔实现的⼀个接⼝,⼴义的 Servlet 是指任何实现了这个 Servlet 接⼝的类,⼀般情况下,⼈们将 Servlet 理解为后者。

Tomcatwiki的定义:Tomcat 是由 Apache 软件基⾦会下属的 Jakarta 项⽬开发的⼀个 Servlet 容器,按照 Sun Microsystems 提供的技术规范,实现了对 Servlet 和 JavaServer Page(JSP)的⽀持,并提供了作为 Web 服务器的⼀些特有功能,如 Tomcat 管理和控制平台、安全域管理和 Tomcat 阀等。

由于 Tomcat 本⾝也内含了⼀个 HTTP 服务器,它也可以被视作⼀个单独的 Web 服务器。

但是,不能将 Tomcat 和 Apache HTTP 服务器混淆,Apache HTTP 服务器是⼀个⽤C语⾔实现的 HTTPWeb服务器;这两个 HTTP web server 不是捆绑在⼀起的。

Apache Tomcat 包含了⼀个配置管理⼯具,也可以通过编辑XML格式的配置⽂件来进⾏配置。

5G SA的网络架构和关键技术

5G SA的网络架构和关键技术

5G SA的网络架构和关键技术5G SA是指基于5G独立组网(Standalone)的网络架构,与之相对应的是5G NSA (Non-Standalone)网络架构。

下面将介绍5G SA的网络架构和关键技术。

1. 网络架构:5G SA网络架构主要包括核心网、无线接入网与用户设备三个部分。

1.1 核心网:5G SA核心网的架构由5G核心网(5GC)和业务支持系统(Business Support System,BSS)组成。

5GC是5G SA核心网的关键组成部分,包括核心用户面、核心控制面和网络管理平面。

在核心用户面上,5GC提供了一系列的业务功能,例如用户识别、安全策略、会话管理等。

核心控制面负责用户数据的传输和路由,以及网络功能的控制和协调。

网络管理平面负责网络的配置、管理和监控。

1.2 无线接入网:5G SA的无线接入网包括5G基站和传输网络两部分。

5G基站负责与用户设备之间的无线通信,通过用户设备接入射频信号进行数据传输。

传输网络负责将用户设备传输的数据进行处理和转发,以保证数据的稳定性和可靠性。

1.3 用户设备:就像其他移动通信网络,5G SA网络中的用户设备包括手机、平板电脑、物联网设备等。

用户设备通过5G基站与核心网和其他用户设备进行通信。

2. 关键技术:2.1 新空口技术:为了实现更高的数据传输速率和更低的时延,5G SA引入了新的空口技术,如高增益多天线技术(Massive MIMO)、波束成形技术(Beamforming)和多路径接收技术等。

这些技术可以增加无线信号的覆盖范围和传输效率,提高网络的容量和性能。

2.2 网络切片:5G SA支持网络切片技术,将网络资源按照不同的业务需求进行划分和分配,可以为不同的应用场景提供定制化的网络服务。

网络切片可以提高网络的灵活性和可扩展性,支持各种不同类型的应用,如增强型移动宽带、物联网和车联网等。

2.3 蜂窝协同传输:5G SA引入了蜂窝协同传输技术,可以将多个基站的传输资源进行协同利用,提高网络的能源效率和容量。

openfire简介

openfire简介
– 低级(字节缓存)和高级(用户定义的消息对象和编码)的 API;
– 高度定制化线程模型(单线程/线程池)。 – 超载保护和传输流量控制
3、Openfire通信
——MINA流程
4、Openfire内部处理
• 自定义IQ处理器:处理自定义IQ包 • 自定义组件:自定义一个组件,名为 broadcast ,那么发送给子域 的消息,全部会路由 到该组件。 • 拦截器,全局拦截所有流经Openfire的 Packet包。用户拦截器拦截所有和该用户有 关的Packet包。 是Openfire扩展的主要三种方式
自定义组件 由路由表 查询得到
4、Openfire内部处理 ——Packet拦截
• 拦截管理器维护两个列表,一个是全局拦 截器列表,另一个是用户拦截器列表 • 全局拦截所有流经Openfire的Packet包。 • 用户拦截器拦截所有和该用户有关的Packet 包。
• 在所有送入和送出的包做处理前后,拦截 管理器都会拦截包做相关处理
Openfire简介
1、为什么选择Openfire?
• • • • • • 完全开源,GPL协议; 完全JAVA语言实现,不依赖任何系统平台; 基于成熟的XMPP协议; 基于可扩展的WEB控制管理界面; 基于插件的开发框架,高可扩展性; 稳定,支持上万并发用户。
2、Openfire框架
——模块图
当我们访问Plain Page, Web.xml里面配置的 Sitemesh过滤器会自动给 Plain Page装饰。这些装饰 一般都是菜单,通过定义 模板+配置文件可以实现。 为插件实现页面提供了可 能。
4、Openfire内部处理 ——Packet拦截程图
注册自定义 拦截器到拦 截管理器

Mina简单的入门示例

Mina简单的入门示例

Mina简单的⼊门⽰例Mina是Apache下的⼀个⽹络应⽤程序框架,⽤来帮助⽤户简单地开发⾼性能和⾼可扩展性的⽹络应⽤程序。

它提供了⼀个通过Java NIO在不同的传输协议上抽象的事件驱动的异步API,例如TCP/IP和UDP/IP。

还没了解原理之前,我们先从官⽹例⼦改写⼀下,从实践开始。

我记得⼊⾏前有个前辈说过,学习任何新技术,不要先急着了解其原理,先找个例⼦实践⼀下。

我觉得相当正确,因为没有谁在学习⾃⾏车前,是先把⾃⾏车运⾏原理弄清楚的。

依赖:jdk1.7开发环境:ideaIU-14.1.4测试环境:win7建⽴maven⼯程MinaDemo,在pom.xml配置⽂件添加必要的依赖:12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21<?xml version="1.0"encoding="UTF-8"?><project xmlns=""xmlns:xsi=""xsi:schemaLocation=" "><modelVersion>4.0.0</modelVersion><groupId>MinaDemo</groupId><artifactId>MinaDemo</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>org.apache.mina</groupId> <artifactId>mina-core</artifactId><version>2.0.9</version></dependency></dependencies></project>TimeServer.java类:12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30package com.mangocool.mina;import java.io.IOException;import .InetSocketAddress;import java.nio.charset.Charset;import org.apache.mina.core.service.IoAcceptor;import org.apache.mina.core.session.IdleStatus;import org.apache.mina.filter.codec.ProtocolCodecFilter;import org.apache.mina.filter.codec.prefixedstring.PrefixedStringCodecFactory;import org.apache.mina.filter.logging.LoggingFilter;import org.apache.mina.transport.socket.nio.NioSocketAcceptor;/*** Created by MANGOCOOL on 2015/10/20.*/public class TimeServer {private static final int PORT = 9123;public static void main(String[] args) throws IOException{// 创建服务监听器,6是IoProcessor的线程数IoAcceptor acceptor = new NioSocketAcceptor(6);// 增加⽇志过滤器acceptor.getFilterChain().addLast("logger", new LoggingFilter());// 增加编码过滤器,统⼀编码UTF-8acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new PrefixedStringCodecFactory(Charset.forName("UTF-8")))); // 设置服务端逻辑处理器acceptor.setHandler(new TimeServerHandler());30 31 32 33 34 35 36 37 38 39 acceptor.setHandler(new TimeServerHandler());// 设置读缓存⼤⼩acceptor.getSessionConfig().setReadBufferSize(2048);// 设置指定类型的空闲时间,空闲时间超过这个值将触发sessionIdle⽅法 acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10); // 绑定端⼝acceptor.bind(new InetSocketAddress(PORT));}}TimeServerHandler.java类:1234 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56package com.mangocool.mina;import java.util.Date;import org.apache.mina.core.service.IoHandler;import org.apache.mina.core.session.IdleStatus;import org.apache.mina.core.session.IoSession;/*** Created by MANGOCOOL on 2015/10/20.*/public class TimeServerHandler implements IoHandler {@Overridepublic void exceptionCaught(IoSession session, Throwable throwable) throws Exception{throwable.printStackTrace();}@Overridepublic void messageReceived(IoSession session, Object message) throws Exception{String str = message.toString();System.out.println("server端接收到的消息:"+ str);if(str.trim().equalsIgnoreCase("exit")){session.close(true);return;}Date date = new Date();session.write(date.toString());}@Overridepublic void messageSent(IoSession session, Object message) throws Exception{System.out.println("server端发送信息:"+ message.toString());}public void inputClosed(IoSession session) throws Exception{System.out.println("server端:"+ session.getId() + " 关闭输⼊");}@Overridepublic void sessionClosed(IoSession session) throws Exception{System.out.println("server端IP:"+ session.getRemoteAddress().toString() + " 关闭连接"); System.exit(0);}@Overridepublic void sessionCreated(IoSession session) throws Exception{System.out.println("server端IP:"+ session.getRemoteAddress().toString() + " 创建连接"); }@Overridepublic void sessionIdle(IoSession session, IdleStatus status) throws Exception56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 public void sessionIdle(IoSession session, IdleStatus status) throws Exception{System.out.println("server端闲置连接:会话 "+ session.getId() + " 被触发 "+ session.getIdleCount(status) + " 次"); }@Overridepublic void sessionOpened(IoSession session) throws Exception{System.out.println("server端打开连接");}}public void exceptionCaught(IoSession session, Throwable cause) 当接⼝中其他⽅法抛出异常未被捕获时触发此⽅法。

mina中文开发手册

mina中文开发手册
Apache Mina Server 2.0 中文参考手册
李海峰(QQ:61673110)-Andrew830314@
Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于 TCP/IP、UDP/IP 协议栈的通信框架(当然,也可以提供 JAVA 对象的序列化服务、虚拟机管道通信服务等), Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina 提供了事件驱动、异 步(Mina 的异步 IO 默认使用的是 JAVA NIO 作为底层支持)操作的编程模型。 Mina 主要有 1.x 和 2.x 两个分支,这里我们讲解最新版本 2.0,如果你使用的是 Mina 1.x, 那么可能会有一些功能并不适用。学习本文档,需要你已掌握 JAVA IO、JAVA NIO、JAVA Socket、JAVA 线程及并发库(java.util.concurrent.*)的知识。 Mina 同时提供了网络通信的 Server 端、Client 端的封装,无论是哪端,Mina 在整个网通 通信结构中都处于如下的位置:
_______________________________________________________________________________ 2. 简单的 TCPClient: 这里我们实现 Mina 中的 TCPClient,因为前面说过无论是 Server 端还是 Client 端,在 Mina 中的执行流程都是一样的。唯一不同的就是 IoService 的 Client 端实现是 IoConnector。
可见 Mina 的 API 将真正的网络通信与我们的应用程序隔离开来,你只需要关心你要发送、 接收的数据以及你的业务逻辑即可。 同样的,无论是哪端,Mina 的执行流程如下所示:

mina原理

mina原理

客户端通信过程1.通过SocketConnector同服务器端建立连接2.链接建立之后I/O的读写交给了I/O Processor线程,I/O Processor是多线程的3.通过I/O Processor读取的数据经过IoFilterChain里所有配置的IoFilter,IoFilter进行消息的过滤,格式的转换,在这个层面可以制定一些自定义的协议4.最后IoFilter将数据交给Handler进行业务处理,完成了整个读取的过程5.写入过程也是类似,只是刚好倒过来,通过IoSession.write写出数据,然后Handler进行写入的业务处理,处理完成后交给IoFilterChain,进行消息过滤和协议的转换,最后通过I/O Processor将数据写出到socket通道IoFilterChain作为消息过滤链1.读取的时候是从低级协议到高级协议的过程,一般来说从byte字节逐渐转换成业务对象的过程2.写入的时候一般是从业务对象到字节byte的过程IoSession贯穿整个通信过程的始终整个过程可以用一个图来表现消息箭头都是有NioProcessor-N线程发起调用,默认情况下也在NioProcessor-N线程中执行类图/class-diagrams.html#ClassDiagrams-ProtocolDeco derclassdiagramConnector作为连接客户端,SocketConector用来和服务器端建立连接,连接成功,创建IoProcessor Thread(不能超过指定的processorCount),Thread由指定的线程池进行管理,IoProcessor 利用NIO框架对IO进行处理,同时创建IoSession。

连接的建立是通过Nio的SocketChannel进行。

NioSocketConnector connector = new NioSocketConnector(processorCount); ConnectFuture future = connector.connect(new InetSocketAddress(HOSTNAME, PORT));建立一个I/O通道Acceptor作为服务器端的连接接受者,SocketAcceptor用来监听端口,同客户端建立连接,连接建立之后的I/O操作全部交给IoProcessor进行处理IoAcceptor acceptor = new NioSocketAcceptor();acceptor.bind( new InetSocketAddress(PORT) );Protocol利用IoFilter,对消息进行解码和编码,如以下代码通过 MyProtocolEncoder 将java对象转成byte串,通过MyProtocalDecoder 将byte串恢复成java对象Java代码1.connector.getFilterChain().addLast(&quot;codec&quot;, new ProtocolCodecFilter(new MyProtocalFactory()));2.......3.public class MyProtocalFactory implements ProtocolCodecFactory{4. ProtocolEncoderAdapter encoder = new MyProtocolEncoder();5. ProtocolDecoder decoder = new MyProtocalDecoder() ;6. public ProtocolDecoder getDecoder(IoSession session) throws Exception {7. return decoder;8. }9. public ProtocolEncoder getEncoder(IoSession session) throws Exception {10. return encoder;11. }12.}13.......14.public class MyProtocalDecoder extends ProtocolDecoderAdapter{15.16. public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out)17. throws Exception {18.19. int id = in.getInt();20. int len = in.getInt();21. byte[] dst = new byte[len];22.23. in.get(dst);24.25. String name = new String(dst,&quot;GBK&quot;);26.27. Item item = new Item();28. item.setId(id);29. item.setName(name);30. out.write(item);31. }32.}33.......34.public class MyProtocolEncoder extends ProtocolEncoderAdapter {35.36. public void encode(IoSession session, Object message,37. ProtocolEncoderOutput out) throws Exception {38. Item item = (Item)message;39. int byteLen = 8 + item.getName().getBytes(&quot;GBK&quot;).length ;40. IoBuffer buf = IoBuffer.allocate(byteLen);41. buf.putInt(item.getId());42. buf.putInt(item.getName().getBytes(&quot;GBK&quot;).length);43. buf.put(item.getName().getBytes(&quot;GBK&quot;));44. buf.flip();45. out.write(buf);46.47. }48.}handler具体处理事件,事件包括:sessionCreated、sessionOpened、sessionClosed、sessionIdle、exceptionCaught、messageReceived、messageSent。

基于MINA构建简单高性能的NIO应用

基于MINA构建简单高性能的NIO应用

Cf g tF i er h i ). d L t( g. e i t C a n( a d as
”logger”,
n w e L g i gF l e ( o g n i t r ) ) Cf g t g. e Fi t r ha n ( . dd a t ( i e C i ) a L s
n w e D t ( a e )
s s i n . ri e ( e s o w t d t . o tr n ( a e t S i g ) ) Sy t m . u pr nt n ( s e o t. i l
维普资讯
比刚刚的例子来看这个架构 图。
S s e . u pr n y t m o t. i tl n( ” i s ve s r e T me er r ta t d. ) ” )
首 先 需 要 一 个 IA c po , 这 里 o c e tr 我 们 选 择 了 一 个 S c eA c po, 也 o k tc e tr 就是 T CP协 议 。 然 后 , 给 应 用 加 上 日 志 过 滤 器 和
me s g R c i d就 是 整 个 H n lr s a e e ev e a de 的 中心 部 分 , 每 一 个 从 客 户 端 发 过 来
uc :i b l
void mess a
t ro E e ti { h w8 xc p on
Stri str na

( t n ms r g) S i gt , ̄

bl 壹 。t 佣 氆 e 悠: 瓣
i 蔓 载 薯 臻
D t a e da e t
了 该 事 件 的 含 义 。me s g R c i d s a e e ev e

河南师范大学计算机科学与技术专业本科毕业论文

河南师范大学计算机科学与技术专业本科毕业论文

学号:0928524059基于Mina框架的Java通讯层应用学院名称:软件学院专业名称:计算机科学与技术年级班别: 2009级Java班姓名:指导教师:教授2013年05月基于Mina框架的Java通讯层应用摘要Apache Mina Server是一个网络通信应用框架,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供JAVA对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina 提供了事件驱动、异步(Mina 的异步IO 默认使用的是JAVA NIO 作为底层支持)操作的编程模型。

随着网络通信的不断增加,用户对于服务器通讯层的要求也越来越高。

如何提高服务器端程序的性能,如何使用一种高效的I/O底层,从而更容易地开发出高性能的网络应用程序,成为近年来通讯层研究的主要课题。

通过对比,基于Mhm(Minimum hardware modificatio)框架的通讯层具有实现简单,性能高效的特点,是Java通讯层应用的推荐框架.关键词Mina;Java;Mhm;IO;NIO;Socket;ServerSocket; TCP/IP; IoAcceptor ;IoConnector; BufferedReader;Buffer;Charset;Channels;Selector;J2EE;MyEclipse;Enterprise ;JavaBeans; MinaServeBased on the the Mina Framework of Java Communication Layer ApplicationsAbstract Apache Mina Server is a network communication application framework, it is primarily a communication framework based on TCP / IP, UDP / IP protocol stack (of course, also can provide Java object serialization, the virtual machine pipe communication services), Mina canhelp us to quickly develop high-performance, highly scalable network communications applications, Mina provides event-driven, asynchronous (asynchronous IO Mina's default is to use programming model the Java NIO as the underlying support) operation. With the continuous increase in network traffic, users are increasingly high requirements for the server communication layer. Therefore, how to improve the performance of the server-side program, how to use a highly efficient I / O low-level, making it easier to develop a high-performance network applications become the main topic of the communication layer in recent years. Mhm (Minimum hardware modification ) framework-based communication layer has a simple, efficient performance, by contrast, is the the Java communication layer applications recommended framework.Keywords Mina;Java;Mhm;IO;NIO;Socket;ServerSocket;TCP/IP;IoAcceptor ;IoConnector;BufferedReader;Buffer;Charset;Channels;Selector;J2EE;MyEclipse;Enterprise ;JavaBeans;MinaServe。

5G SA的网络架构和关键技术

5G SA的网络架构和关键技术

5G SA的网络架构和关键技术随着5G标准的逐步成熟和商用,5G SA(独立组网)作为5G网络的一种重要架构,也受到了广泛的关注。

与NSA(非独立组网)相比,5G SA具有更高的灵活性和性能优势,能够为用户提供更加稳定和高速的网络体验。

本文将从网络架构和关键技术两个方面,探讨5G SA的特点和优势。

一、5G SA的网络架构5G SA的核心网络架构主要由AMF(核心网功能性网络节点)、SMF(会话管理功能网络节点)、UPF(用户面功能网络节点)、NRF(网络资源功能网络节点)等组成。

AMF负责用户身份管理和鉴权,SMF负责会话管理和策略控制,UPF负责用户数据的传输和处理,NRF负责网络资源的管理和分配。

这个核心网络架构的设计使得5G SA具有更加灵活和快速的网络部署能力,能够更好地适应不同业务场景和需求。

5G SA的无线接入网络架构采用了全新的RAN(无线接入网络)架构,主要由gNB(5G 基站)和NG-RAN(Next Generation RAN)组成。

gNB与NG-RAN之间采用了灵活的接口协议,能够实现更加高效的无线资源调度和管理。

5G SA的RAN架构还支持更多频段的组网和更高密度的接入用户,使得5G SA能够更好地应对移动宽带、物联网和工业互联网等多种业务需求。

二、5G SA的关键技术1. 网络切片技术网络切片是5G SA的重要技术之一,它能够将整个网络资源根据不同的业务需求和服务质量要求,进行灵活的划分和分配。

通过网络切片技术,5G SA能够为不同的用户和业务提供定制化的网络服务,满足不同的性能指标和服务级别。

这一技术的应用,使得5G SA能够更好地支持多样化的服务和应用场景,为用户提供更加优质的网络体验。

2. Massive MIMO技术Massive MIMO是5G SA的另一项关键技术,它通过大规模天线阵列和高效的信号处理算法,能够实现更加高效的空间频谱复用和波束赋形,提高了网络的覆盖范围和容量。

基于高性能NIO的MINA框架的应用

基于高性能NIO的MINA框架的应用
IoFilter槲ll组成,IoFflter是一个可以 模块提供的工具类如图2…。 2)IOFilterC hain:由一系列的
复用性很强和热部署的事件请求拦截器。 它可以用来实现事件日志,认证、编码,解 码、线程池、SSL、TLS等各种独立功能。 在实际设计时将一些功能性的、业务不相 关的代码用loFilter来实现,使得整个应用 结构更清晰,也方便代码重用。
参考文献(7条)
1.Emmanuel L é charny MINA in real life
2.封玮;周世平 基于JavaNIO的非阻塞通信的研究与实现[期刊论文]-计算机系统应用 2004(09)
n呦etworEsx.ecnuetwoCraFiclbtoe田r(mr昀dP(d()))l
线程数量配置后,开始在其对应的 IoFilterChain中添加IoFilter过滤器。这 个过滤器就是一个ProtocolCodecFiiter类型 的Jabber xML协议过滤器。添)JIlloFilter 过滤器的代码为:
about MINA framework,the concrete processes and techniques of using MINA to build Jabber instant
messaging system server are expounded.The resu)ts
show that it is simple and convenient tO facilitate
参考文献
舢蝴Eu,009. …Emmanuel k e charny.MINA in剧w雠0L】.
[2】封玮,周世平.基于JavaNl0的非阻塞通信
的研究与实叫J】.计算机系统应用.2004

Mina框架研究与实现

Mina框架研究与实现

考 虑 处理底 层 I0 和 线程 并发 等 复 杂工作 ,使 开发 人 员能够把 更 多的精 力投入 到 业 务设 计和 开发 /
中。
关 键 词 :M ia 多 线 程 ;过 滤 器 n;
1 引 言
随 着 网络 通 信 的 不 断增 加 ,对 服 务 器 端 程 序 提 出 了越 来 越 高 的要 求 。 一 个 服 务 器 端 同 时 连 接 几 百 上 千 个 客 户 端 ,早 已 经是 司空见惯 . 。这 就 对 服 务 器 端 程 序 的 高 性 能 提 出 了 挑 战 , 因 此 ,需要 使 用 一种 高效 的 I 底 层 ,来 更 容 易 地 开 发 出 高 性 / 0 能 的 网络 应 用 程 序 。 Jv I 和 Mia的 出 现 ,给 提 供 了 一 种 解 决 方 案 。Mia aa N O n n
v i x epin a g tISe so e so . h o be c u e od e c t C u h ( o o s in s s in T rwa l a s )
, 接收 到客 户端 的请 求 信 息 后 触发 此方 法 / 当
v i me s g R c i d1S s ins s in Obe t sa e od s a e e e e ( e s e s . jc s g ) V o o o me ∥ 当信息 已经传送给客户端后触发此方法 v i me sg S n( S s ins s in Ob c s a e od s a e e to e s e so , j tme s g ) I 0 e / 连接 被 关 闭 时 触 发 , 如 客 户 端 程 序 意 外退 出等 等 . , 当 例


_ 盯WO K 0 _ _哪 nN…………………………………………………………………………………口 R &C 啊l I O U

MINA框架详解

MINA框架详解

Mina框架技术知识介绍一.MINA框架简介1.1Mina是什么东西?Apache MINA 是一个网络应用框架,有助于用户非常方便地开发高性能、高伸缩性的网络应用。

它通过Java NIO提供了一个抽象的、事件驱动的、异步的位于各种传输协议(如TCP/IP 和UDP/IP)之上的API,Apache MINA 通常可被称之为:l NIO 框架库;l 客户端/服务器框架库;l 或者一个网络socket库。

MINA框架的特点有:基于java NIO类库开发;采用非阻塞方式的异步传输;事件驱动;支持批量数据传输;支持TCP、UDP协议;控制反转的设计模式(支持Spring);采用优雅的松耦合架构;可灵活的加载过滤器机制;单元测试更容易实现;可自定义线程的数量,以提高运行于多处理器上的性能;采用回调的方式完成调用,线程的使用更容易。

1.2Mina的框架当远程客户首次访问采用MINA编写的程序时,IoAcceptor作为线程运行,负责接受来自客户的请求。

当有客户请求连接时,创建一个IoSession,该IoSession与IoProcessor、SocketChannel以及IOService联系起来。

IoProcessor也作为另外一个线程运行,定时检查客户是否有数据到来,并对客户请求进行处理,依次调用在IOService注册的各个IoFilter,最后调用IoHandler进行最终的逻辑处理,再将处理后的结果Filter后返回给客户端。

1.3Mina的现有应用MINA框架的应用比较广泛,应用的开源项目有Apache Directory、AsyncWeb、ApacheQpid、QuickFIX/J、Openfire、SubEthaSTMP、red5等。

MINA框架当前稳定版本是1.1.6,最新的2.0版本目前已经发布了M1版本。

二.MINA框架具体技术2.1MINA框架的常用类1.类NioSocketAcceptor用于创建服务端监听2.类NioSocketConnector用于创建客户端连接;3.类IoSession用来保存会话属性和发送消息;可以理解为服务器与客户端的特定连接,该连接由服务器地址、端口以及客户端地址、端口来决定。

Mina

Mina
Mina
Apache MINA是一个网络应用程序框架, 用来帮助用户简单地开发高性能和高可靠性的 网络应用程序。它提供了一个通过Java NIO在 不同的传输例如TCP/IP和UDP/IP上抽象的事件 驱动的异步API 。
Mina整体结构图
Mina通信流程图
Mina重要的接口
IoService IoAcceptor IoConnector IoServiceListener IoProcessor IoSession IoSessionConfig IoFilter IoHandler
Mina通信核心类类图
IoService
IoService这个服务是对于服务器端的接受连接和客户端发起 连接这两种行为的抽象。 底层的元数据信息TransportMetadata,比如底层的网络服务提供 者(NIO,ARP,RXTX等 ) 通过这个服务创建一个新会话时,新会话的默认配置 IoSessionConfig 获取此服务所管理的所有会话 与这个服务相关所产生的事件所对应的监听者 (IoServiceListener) 处理这个服务所管理的所有连接的处理器(IoHandler) 每个会话都有一个过滤器链(IoFilterChain),每个过滤器链通 过其对应的IoFilterChainBuilder来负责构建 服务创建的会话(IoSession)集,以及广播的方法
SimpleIoProcessorPool
IoProcessor接口的基本实现类SimpleIoProcessorPool,它的 泛型参数是AbstractIoSession的子类,表示此Processor管理的具 体会话类型。并且这个类还实现了池化,它会将多个IoSession分 布到多个IoProcessor上去管理。注意一个 一个processor是可以同时 一个 是可以同时 管理多个session的 的 管理多个

Mina使用教程

Mina使用教程

Mina使⽤教程Mina框架简介⼀、Mina基本概念1、BIO、NIO、AIOJava BIO :同步并阻塞,服务器实现模式为⼀个连接⼀个线程,即客户端有连接请求时服务器端就需要启动⼀个线程进⾏处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。

使⽤API:ServerSocket、SocketJava NIO :同步⾮阻塞,服务器实现模式为⼀个请求⼀个线程,即客户端发送的连接请求都会注册到多路复⽤器上,多路复⽤器轮询到连接有I/O请求时才启动⼀个线程进⾏处理。

使⽤API:ServerSocketChannel、SocketChannel、SelectorJava AIO(NIO.2) :异步通道提供⽀持连接、读取、以及写⼊之类⾮锁定操作的连接,并提供对已启动操作的控制机制。

Java 7 中⽤于Java Platform(NIO.2)的More New I/O APIs,通过在 java.nio.channels 包中增加四个异步通道,从⽽增强了Java 1.4 中的New I/O APIs(NIO)。

使⽤API:AsynchronousServerSocketChannel、AsynchronousSocketChannel、CompletionHandler2、NIO线程模型单⼀线程单⼀Selector模型:与多线程处理BIO相⽐减少了线程数量,⽤⼀个线程循环处理ACCEPT、READ、WRITE。

但是如果某⼀次READ 或者WRITE处理时间过长,都会影响后⾯的事件响应。

3、Mina2.0的线程模型与单⼀线程处理单⼀Selector相⽐,Mina采⽤三种线程:IoAcceptor/IoConnector线程、IoProcessor线程、IoHandler线程在服务器端,bind⼀个端⼝后,会创建⼀个Acceptor线程来负责监听⼯作。

这个线程的⼯作只有⼀个:调⽤Java NIO接⼝在该端⼝上select connect事件,获取新建的连接后,封装成IoSession,交由后⾯的Processor线程处理。

Mina使用详细教程

Mina使用详细教程

Mina使用详细教程1Mina简介:Apache MINA(Multipurpose Infrastructure for Network Applications) 是Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。

当前发行的MINA 版本支持基于Java NIO 技术的TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中。

本文将通过官方网站上的快速入门程序来介绍MINA 的基础架构的同时演示如何使用MINA 开发网络应用程序。

2环境准备:首先到官方网站下载最新的MINA 版本,地址是:/downloads.html。

下载之前先介绍一下MINA 的两个版本:1.0.x 适合运行环境为JDK1.4,1.1.x 适合JDK1.5 的版本,两者的编译环境都需要JDK1.5。

JDK1.5 已经是非常普遍了,本文中使用 1.1.5 版本的MINA,编译和运行所需的文件是mina-core-1.1.7.jar。

下载MINA 的依赖包slf4j。

MINA 使用此项目作为日志信息的输出,而MINA 本身并不附带此项目包,请到/download.html地址下载slf4j 包,slf4j 项目解压后有很多的文件,本例中只需要其中的slf4j-api-1.5.2.jar 和slf4j-simple-1.5.2.jar 这两个jar 文件。

如果没有这两个文件就会导致启动例子程序的时候报org/slf4j/LoggerFactory 类没找到的错误。

当然要求机器上必须装有1.5 或者更新版本的JDK。

最好你应该选择一个顺手的Java 开发环境例如Eclipse 或者NetBeans 之类的,可以更方便的编码和调试。

3MINA 基本类的描述:3.1 IoService应用程序入口IoService负责底层通讯接入,IoAcceptor(服务器端)和IoConnector(客户端)是IoService 的扩展接口。

mina框架的构成和功能

mina框架的构成和功能

mina框架的构成和功能随着移动互联网的迅速发展,移动应用的开发需求也越来越高。

而mina框架作为一款高性能、灵活的网络通信框架,能够满足这些需求。

本文将介绍mina框架的构成和功能。

一、框架构成mina框架由三个核心部分组成:Acceptor、IoSession和FilterChain。

1. AcceptorAcceptor是mina框架的入口点,负责监听和接收客户端的连接请求。

当有新的连接请求到达时,Acceptor会创建一个IoSession来处理该连接。

2. IoSessionIoSession是mina框架中的核心对象,代表一个客户端与服务器之间的连接。

每个连接都有一个对应的IoSession对象。

通过IoSession,我们可以获取到客户端发送的数据、发送数据给客户端,以及管理连接的状态等。

3. FilterChainFilterChain是mina框架中的过滤器链,用于对客户端发送和接收的数据进行处理。

过滤器链中的每个过滤器都可以对数据进行读取、编码、解码、过滤等操作。

多个过滤器可以组成一个过滤器链,按照添加的顺序依次对数据进行处理。

二、框架功能1. 高性能的网络通信mina框架基于NIO技术,使用非阻塞的IO模型,能够处理大量的并发连接。

相比于传统的BIO模型,mina框架可以更高效地处理网络通信,提供更好的响应速度和吞吐量。

2. 灵活的协议支持mina框架提供了灵活的协议支持,可以根据实际需求自定义通信协议。

通过实现IoHandler接口,我们可以处理客户端发送的数据,并根据自定义的协议进行解码和编码操作。

这使得mina框架可以适用于各种不同的应用场景。

3. 多种编解码器支持mina框架提供了多种编解码器,可以方便地进行数据的编码和解码。

通过使用这些编解码器,我们可以将数据转换为不同的格式,实现数据的传输和解析。

同时,mina框架还支持自定义的编解码器,以满足特定的需求。

4. 异步事件驱动mina框架采用异步事件驱动的方式处理网络通信,可以处理多个连接的并发操作。

mina各客户端协议的写法

mina各客户端协议的写法

mina各客户端协议的写法mina是一个基于Java的高性能网络编程框架,其灵活的体系结构和强大的功能使得它在各种网络应用中得到了广泛的应用。

而在mina中,客户端和服务器之间的通信协议是非常重要的一部分,它决定了数据的传输方式和处理逻辑。

在mina中,客户端协议的写法也是非常关键的,它直接影响了通信的稳定性和效率。

在mina中,客户端协议通常由两部分组成:消息编码器和消息解码器。

消息编码器负责将客户端发送的数据编码成字节流,以便服务器能够正确解析和处理;而消息解码器则负责将服务器返回的字节流解码成客户端能够理解的数据格式。

这样一来,客户端和服务器之间就可以实现数据的相互通信。

在编写mina客户端协议时,需要首先定义一个消息对象,用来封装客户端和服务器之间的数据交互。

这个消息对象通常包含一个消息类型字段和一个消息内容字段,用来标识和存储数据。

然后,需要编写消息编码器和消息解码器,将消息对象转换成字节流并进行解析。

在编写编解码器时,需要考虑数据的粘包和拆包问题,保证数据的完整性和准确性。

另外,在编写mina客户端协议时,还需要考虑数据的加密和压缩。

为了保护数据的安全性,可以使用SSL或者加密算法对数据进行加密;而为了减少数据传输的时间和带宽消耗,可以使用压缩算法对数据进行压缩。

这样一来,可以提高数据传输的效率和安全性。

除了消息编码器和解码器,mina客户端协议还可以包含其他的处理器,用来处理数据的发送和接收。

这些处理器可以对数据进行校验、转换、过滤等操作,以实现更复杂的业务逻辑。

通过编写处理器,可以使mina客户端协议更加灵活和强大,满足不同场景下的需求。

总的来说,mina客户端协议的写法需要考虑数据的编解码、加密压缩、处理器等多个方面,以实现高效稳定的通信。

通过合理设计和编写,可以使mina客户端协议更加健壮和功能丰富,为网络应用的开发提供更好的支持。

mina中的cumulativeprotocoldecoder

mina中的cumulativeprotocoldecoder

mina中的cumulativeprotocoldecoder(最新版)目录1.MINA 简介2.CumulativeProtocolDecoder 的作用3.CumulativeProtocolDecoder 的组成4.CumulativeProtocolDecoder 的工作原理5.CumulativeProtocolDecoder 的优点和应用场景正文一、MINA 简介MINA(MINA Message Network Abstraction)是一款用于构建异构网络应用的轻量级、可扩展的网络抽象层。

它提供了一组简洁、易用的 API,使得开发者可以专注于应用的业务逻辑,而无需关心底层的网络通信细节。

在 MINA 中,数据传输采用了协议栈的方式,用户可以根据需要选择不同的协议栈来实现数据传输。

二、CumulativeProtocolDecoder 的作用在 MINA 中,CumulativeProtocolDecoder(累积协议解码器)是一种特殊的协议解码器,它的主要作用是将接收到的数据按照协议的格式进行解码,并将解码后的数据传递给上层的应用。

CumulativeProtocolDecoder 可以处理多种协议,因此在实际应用中,可以简化协议的解析过程,提高应用的灵活性和可扩展性。

三、CumulativeProtocolDecoder 的组成CumulativeProtocolDecoder 主要由以下几个部分组成:1.协议栈:协议栈是 CumulativeProtocolDecoder 的核心部分,它包含了多个协议解码器,每个解码器负责解析一种特定的协议。

2.解码器:解码器是协议栈中的基本单元,它负责将接收到的数据按照协议的格式进行解码,并将解码后的数据传递给上层应用。

解码器可以处理多种协议,因此可以简化协议的解析过程。

3.缓冲区:缓冲区用于存储接收到的数据,解码器会从缓冲区中读取数据进行解码。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

高性能网络服务框架 Mina
因为想做网络 flash 游戏(想开始做个简单的五子棋),希望可以高效的 开发,因为应用群不会超过并发 200 个点,所以性能不是优先考虑,同时又 恰好看到了 mina,故事从这里开始......
Mina 是个 apache 的一个子项, 它把 tcp udp pipe 等做了很好的封装, 同时我不考虑用 c 写是因为以后给别人不好维护,因为现在学 c 的人实在越 来越少了,但是需要性能的网络服务还真得用 C,又费话了一段,下面具体介 绍我刚了解的 Mina. 因为 adobe flash or flex 只支持 tcp client, 所以我测试了 Mina 的 tcp server 部分,看一段代码先
import java.io.IOException;
import .InetSocketAddress; import java.nio.charset.Charset; import mon.ByteBuffer; import mon.IoAcceptor; import mon.SimpleByteBufferAllocator;


import org.apache.mina.filter.LoggingFilter; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.textline.TextLineCodecFactory; import org.apache.mina.transport.socket.nio.SocketAcceptor; import org.apache.mina.transport.socket.nio.SocketAcceptorConfig; public class test { /** * @param args */ private static final int PORT = 9000; public static void main(String[] args) throws IOException { ByteBuffer.setUseDirectBuffers(false);/*设置内存获取方式*/ ByteBuffer.setAllocator(new SimpleByteBufferAllocator()); IoAcceptor acceptor = new SocketAcceptor();/*socket 接受


服务*/ acceptor.bind( new InetSocketAddress(PORT), new TimeServerHandler());/*bind tcp 的服务, 到这里有用的好像就两行 就搞定了,很简单,这样服务就起来了,呵呵*/ System.out.println("MINA Time server started."); } }
TimeServerHandler 这个部分是实现 tcp server 处理的部分,以下 描述:(为什么起这个名字,因为整个代码我通过网站快速向导做的,没有修 改,原来向导是实现了一个时间询问服务)
import java.util.Date;
import mon.IdleStatus; import mon.IoHandlerAdapter; import mon.IoSession; import mon.TransportType; import org.apache.mina.transport.socket.nio.SocketSessionConfig; import mon.ByteBuffer;


public class TimeServerHandler extends IoHandlerAdapter { /*当 tcp client 发生异常断开时触发*/ public void exceptionCaught(IoSession session, Throwable t) throws Exception { t.printStackTrace(); session.close(); } /*当有数据来时触发*/ public void messageReceived(IoSession session, Object msg) throws Exception { /*接受数据,并且打印成 hex*/ ByteBuffer get = (ByteBuffer)msg; System.out.println("Rec:" + get.getHexDump()); /*反馈数据,一个 a*/ ByteBuffer bb = ByteBuffer.allocate(10); bb.asCharBuffer().append('a'); session.write( bb);


System.out.println("Message written..."); } /*当连接建立时触发*/ public void sessionCreated(IoSession session) throws Exception { System.out.println("Session created..."); if( session.getTransportType() == TransportType.SOCKET ) ((SocketSessionConfig) session.getConfig() ).setReceiveBufferSize( 2048 ); session.setIdleTime( IdleStatus.BOTH_IDLE, 10 ); } }











相关文档
最新文档