`

mina(一)总结,可用例子

    博客分类:
  • java
 
阅读更多

一.MINA框架简介
MINA(Multipurpose Infrastructure for Network Applications)是用于开发高性能和高可用性的网络应用程序的基础框架。通过使用MINA框架可以可以省下处理底层I/O和线程并发等复杂工 作,开发人员能够把更多的精力投入到业务设计和开发当中。MINA框架的应用比较广泛,应用的开源项目有Apache Directory、AsyncWeb、Apache Qpid、QuickFIX/J、Openfire、SubEthaSTMP、red5等。MINA框架当前稳定版本是1.1.6,最新的2.0版本目前 已经发布了M1版本。
MINA框架的特点有:基于java NIO类库开发;采用非阻塞方式的异步传输;事件驱动;支持批量数据传输;支持TCP、UDP协议;控制反转的设计模式(支持Spring);采用优雅的 松耦合架构;可灵活的加载过滤器机制;单元测试更容易实现;可自定义线程的数量,以提高运行于多处理器上的性能;采用回调的方式完成调用,线程的使用更容 易。

二.MINA框架的常用类
类NioSocketAcceptor用于创建服务端监听;
类NioSocketConnector用于创建客户端连接;
类IoSession用来保存会话属性和发送消息;
类IoHandlerAdapter用于定义业务逻辑,常用的方法有:
方法 定义
sessionCreated() 当会话创建时被触发
sessionOpened() 当会话开始时被触发
sessionClosed() 当会话关闭时被触发
sessionIdle() 当会话空闲时被触发
exceptionCaught() 当接口中其他方法抛出异常未被捕获时触发此方法
messageRecieved() 当接收到消息后被触发
messageSent() 当发送消息后被触发

三.服务端应用开发示例
  所需jar包slf4j-api.jar、slf4j-jdk14.jar、MINA-core-2.0.0-M6.jar。

1)、首先定义一个业务逻辑处理器TimeServerHandler,继承自IoHandlerAdapter,实现的功能有:当客户端创建会话时会显示客户端设备的IP和端口;当客户端输入quit时结束会话;客户端输入其它内容时则向客户端发送当前时间。代码如下:

TimeServerHandler :

Java代码  收藏代码
  1. import java.util.Date;  
  2.   
  3. import org.apache.mina.core.service.IoHandlerAdapter;  
  4. import org.apache.mina.core.session.IoSession;  
  5.   
  6. public class TimeServerHandler extends IoHandlerAdapter {  
  7.   
  8.     public void sessionCreated(IoSession session) {  
  9.         // 显示客户端的ip和端口  
  10.         System.out.println(session.getRemoteAddress().toString()+"1111111111111");  
  11.     }  
  12.   
  13.     @Override  
  14.     public void messageReceived(IoSession session, Object message)  
  15.             throws Exception {  
  16.         String str = message.toString();  
  17.         System.out.println("str:"+str);  
  18.         if (str.trim().equalsIgnoreCase("quit")) {  
  19.             session.close();  
  20.             // 结束会话return;  
  21.         }  
  22.         Date date = new Date();  
  23.         session.write(date.toString());  
  24.         // 返回当前时间的字符串  
  25.         System.out.println("Message written..."+"2222222222");  
  26.     }  
  27.   
  28.       
  29. }  


MinaTimeServer:

Java代码  收藏代码
  1. import java.io.IOException;  
  2. import java.net.InetSocketAddress;  
  3. import java.nio.charset.Charset;  
  4.   
  5. import org.apache.mina.core.service.IoAcceptor;  
  6. import org.apache.mina.filter.codec.ProtocolCodecFilter;  
  7. import org.apache.mina.filter.codec.textline.TextLineCodecFactory;  
  8. import org.apache.mina.filter.logging.LoggingFilter;  
  9. import org.apache.mina.transport.socket.nio.NioSocketAcceptor;  
  10.   
  11. public class MinaTimeServer {  
  12.   
  13.     private static final int PORT = 9123;// 定义监听端口  
  14.   
  15.     /** 
  16.      * @param args 
  17.      * @throws IOException 
  18.      */  
  19.     public static void main(String[] args) throws IOException {  
  20.         // TODO Auto-generated method stub  
  21.   
  22.         IoAcceptor acceptor = new NioSocketAcceptor();  
  23.         acceptor.getFilterChain().addLast("logger"new LoggingFilter());  
  24.         acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8")))); // 指定编码过滤器  
  25.         acceptor.setHandler(new TimeServerHandler()); // 指定业务逻辑处理器  
  26.         acceptor.setDefaultLocalAddress(new InetSocketAddress(PORT)); // 设置端口号  
  27.         acceptor.bind();// 启动监听}  
  28.     }  
  29.   
  30. }  


2)、客户端代码:

TimeClientHandler:

Java代码  收藏代码
  1. import org.apache.mina.core.service.IoHandlerAdapter;  
  2. import org.apache.mina.core.session.IoSession;  
  3.   
  4. public class TimeClientHandler extends IoHandlerAdapter{  
  5.     public TimeClientHandler() {}  
  6.     @Override  
  7.     public void messageReceived(IoSession session, Object message) throws Exception {  
  8.         System.out.println(message);// 显示接收到的消息  
  9.         }  
  10. }  


MinaTimeClient:

Java代码  收藏代码
  1. import java.net.InetSocketAddress;  
  2. import java.nio.charset.Charset;  
  3. import org.apache.mina.core.future.ConnectFuture;  
  4. import org.apache.mina.filter.codec.ProtocolCodecFilter;  
  5. import org.apache.mina.filter.codec.textline.TextLineCodecFactory;  
  6. import org.apache.mina.filter.logging.LoggingFilter;  
  7. import org.apache.mina.transport.socket.nio.NioSocketConnector;  
  8.   
  9. public class MinaTimeClient {  
  10.   
  11.     /** 
  12.      * @param args 
  13.      */  
  14.     public static void main(String[] args) {  
  15.         // TODO Auto-generated method stub  
  16.         // 创建客户端连接器.  
  17.         NioSocketConnector connector = new NioSocketConnector();  
  18.         connector.getFilterChain().addLast( "logger"new LoggingFilter() );  
  19.         connector.getFilterChain().addLast( "codec"new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));        //设置编码过滤器  
  20.         connector.setConnectTimeout(30);  
  21.         connector.setHandler(new TimeClientHandler());//设置事件处理器  
  22.         ConnectFuture cf = connector.connect(new InetSocketAddress("127.0.0.1"9123));//建立连接  
  23.         cf.awaitUninterruptibly();//等待连接创建完成  
  24.         cf.getSession().write("hello");//发送消息  
  25.         cf.getSession().write("quit");//发送消息  
  26.         cf.getSession().getCloseFuture().awaitUninterruptibly();//等待连接断开  
  27.         connector.dispose();  
  28.     }  
  29.   
  30. }  


*MINA传输对象:

1)、建立两个工程代码组织如下:



传输对象:

UserInfo:

Java代码  收藏代码
  1. package Mina.Object;  
  2.   
  3. public class UserInfo implements java.io.Serializable{  
  4.     private String name;  
  5.     private String QQNum;  
  6.     public String getName() {  
  7.         return name;  
  8.     }  
  9.     public void setName(String name) {  
  10.         this.name = name;  
  11.     }  
  12.     public String getQQNum() {  
  13.         return QQNum;  
  14.     }  
  15.     public void setQQNum(String qQNum) {  
  16.         QQNum = qQNum;  
  17.     }  
  18. }  


客户端代码:

Java代码  收藏代码
  1. package Mina.client;  
  2.   
  3. import org.apache.mina.core.service.IoHandlerAdapter;  
  4. import org.apache.mina.core.session.IoSession;  
  5.   
  6. import Mina.Object.UserInfo;  
  7.   
  8. public class ClientHandler extends IoHandlerAdapter {  
  9.     private static ClientHandler samplMinaClientHandler = null;  
  10.     public static ClientHandler getInstances() {  
  11.         if (null == samplMinaClientHandler) {  
  12.             samplMinaClientHandler = new ClientHandler();  
  13.         }  
  14.         return samplMinaClientHandler;  
  15.     }  
  16.   
  17.     private ClientHandler() {  
  18.   
  19.     }  
  20.   
  21.     public void sessionOpened(IoSession session) throws Exception {  
  22.         session.write("客户端与服务器的会话打开了……");  
  23.         UserInfo text=new UserInfo();  
  24.         text.setName("梅竹寒香");  
  25.         text.setQQNum("972341215");  
  26.         session.write(text);  
  27.     }  
  28.   
  29.     public void sessionClosed(IoSession session) {  
  30.     }  
  31.   
  32.     public void messageReceived(IoSession session, Object message)  
  33.             throws Exception {  
  34.     }  
  35.   
  36.     public void messageSent(IoSession arg0, Object arg1) throws Exception {  
  37.         System.out.println("客户端已经向服务器发送了:"+(String)arg1);  
  38.     }  
  39. }  


MainClient:

Java代码  收藏代码
  1. package Mina.client;  
  2.   
  3. import java.net.InetSocketAddress;  
  4.   
  5. import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;  
  6. import org.apache.mina.core.future.ConnectFuture;  
  7. import org.apache.mina.filter.codec.ProtocolCodecFilter;  
  8. import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;  
  9. import org.apache.mina.transport.socket.nio.NioSocketConnector;  
  10.   
  11. public class MainClient {  
  12.     private static MainClient mainClient = null;  
  13.     NioSocketConnector connector = new NioSocketConnector();  
  14.     DefaultIoFilterChainBuilder chain = connector.getFilterChain();  
  15.   
  16.     public static MainClient getInstances() {  
  17.         if (null == mainClient) {  
  18.             mainClient = new MainClient();  
  19.         }  
  20.         return mainClient;  
  21.     }  
  22.   
  23.     private MainClient() {  
  24.         chain.addLast("myChin"new ProtocolCodecFilter(  
  25.                 new ObjectSerializationCodecFactory()));  
  26.         connector.setHandler(ClientHandler.getInstances());  
  27.         connector.setConnectTimeout(30);  
  28.         ConnectFuture cf = connector.connect(new InetSocketAddress("localhost",  
  29.                 8888));  
  30.     }  
  31.   
  32.     public static void main(String args[]) {  
  33.         MainClient.getInstances();  
  34.     }  
  35. }  


服务器端:

ServerHandler:

Java代码  收藏代码
  1. package Mina.server;  
  2.   
  3. import org.apache.mina.core.filterchain.IoFilterAdapter;  
  4. import org.apache.mina.core.service.IoHandler;  
  5. import org.apache.mina.core.session.IdleStatus;  
  6. import org.apache.mina.core.session.IoSession;  
  7.   
  8. import Mina.Object.UserInfo;  
  9.   
  10. public class ServerHandler extends IoFilterAdapter implements IoHandler {  
  11.     private static ServerHandler samplMinaServerHandler = null;  
  12.   
  13.     public static ServerHandler getInstances() {  
  14.         if (null == samplMinaServerHandler) {  
  15.             samplMinaServerHandler = new ServerHandler();  
  16.         }  
  17.         return samplMinaServerHandler;  
  18.     }  
  19.   
  20.     private ServerHandler() {  
  21.   
  22.     }  
  23.   
  24.     // 当连接后打开时触发此方法,一般此方法与 sessionCreated 会被同时触发  
  25.     public void sessionOpened(IoSession session) throws Exception {  
  26.     }  
  27.     public void sessionClosed(IoSession session) {  
  28.     }  
  29.     public void messageReceived(IoSession session, Object message)  
  30.             throws Exception {      
  31.         if (message instanceof UserInfo) {  
  32.             UserInfo text = (UserInfo) message;  
  33.             System.out.println("服务器接收到从客户端的姓名:"+text.getName());  
  34.             System.out.println("服务器接收到从客户端的QQ:"+text.getQQNum());  
  35.         }   
  36.     }  
  37.   
  38.     public void exceptionCaught(IoSession arg0, Throwable arg1)  
  39.             throws Exception {  
  40.   
  41.     }  
  42.   
  43.     // 当消息传送到客户端后触发  
  44.     public void messageSent(IoSession arg0, Object arg1) throws Exception {  
  45.           
  46.     }  
  47.   
  48.     // 当一个新客户端连接后触发此方法.  
  49.     public void sessionCreated(IoSession arg0) throws Exception {  
  50.           
  51.     }  
  52.   
  53.     // 当连接空闲时触发此方法.  
  54.     public void sessionIdle(IoSession arg0, IdleStatus arg1) throws Exception {  
  55.           
  56.     }  
  57.   
  58. }  


MainServer:

Java代码  收藏代码
  1. package Mina.server;  
  2.   
  3. import java.io.IOException;  
  4. import java.net.InetSocketAddress;  
  5.   
  6. import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;  
  7. import org.apache.mina.filter.codec.ProtocolCodecFilter;  
  8. import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;  
  9. import org.apache.mina.transport.socket.SocketAcceptor;  
  10. import org.apache.mina.transport.socket.nio.NioSocketAcceptor;  
  11.   
  12. public class MainServer {  
  13.     private static MainServer mainServer = null;  
  14.     private SocketAcceptor acceptor = new NioSocketAcceptor();  
  15.     private DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();  
  16.     private int bindPort = 8888;  
  17.   
  18.     public static MainServer getInstances() {  
  19.         if (null == mainServer) {  
  20.             mainServer = new MainServer();  
  21.         }  
  22.         return mainServer;  
  23.     }  
  24.   
  25.     private MainServer() {  
  26.         chain.addLast("myChin"new ProtocolCodecFilter(  
  27.                 new ObjectSerializationCodecFactory()));  
  28.         acceptor.setHandler(ServerHandler.getInstances());  
  29.         try {  
  30.             acceptor.bind(new InetSocketAddress(bindPort));  
  31.         } catch (IOException e) {  
  32.             e.printStackTrace();  
  33.         }  
  34.     }  
  35.   
  36.     public static void main(String[] args) throws Exception {  
  37.         MainServer.getInstances();  
  38.     }  

分享到:
评论

相关推荐

    mina消息推送例子

    总结来说,这个“mina消息推送例子”展示了如何利用Apache Mina作为基础,结合Spring的管理能力,构建一个能够实现实时消息推送的系统。通过理解Mina的异步事件模型和Spring的组件管理,我们可以高效地设计和实现高...

    apache-mina例子

    Apache Mina是一个开源项目,主要用于构建高性能、高可用性的网络应用程序。这个例子是关于如何使用Apache Mina实现一个简单的服务端和客户端通信的示例。在这个案例中,`MinaTimeServer`是服务端程序,它负责监听...

    mina权威性能测试例子

    Apache Mina是一个开源的网络通信应用框架,主要应用于构建高性能、高可用性的网络服务器和客户端。这个"mina权威性能测试例子"是针对Apache Mina的一个实际性能测试案例,旨在展示在特定环境下Mina如何处理大量并发...

    mina源码+例子mina-2.0.0-M6.zip

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,用于构建高性能、高可用性的网络应用程序。MINA 提供了一套高级的网络编程抽象层,简化了开发过程,特别是对于那些处理TCP/IP...

    mina通讯例子

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,用于构建高性能、高可用性的网络应用程序。这个"mina通讯例子"展示了如何利用MINA库来实现客户端与服务器之间的对象通信。 ...

    mina 服务器开发例子

    Mina(Minimum Asynchronous Network)是一个开源的Java框架,主要用于构建高性能、高可用性的网络应用程序,尤其适合于TCP/IP协议栈的应用,如FTP、SMTP、NNTP等网络服务。它提供了一个事件驱动、非阻塞I/O的模型,...

    mina入门例子

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,用于构建高性能、高可用性的网络应用程序。MINA 提供了一套高级的网络编程抽象层,让开发者可以专注于业务逻辑,而不是底层的...

    MINA 1.0 版本的源码以及相关的例子依赖包等

    通过这些例子,开发者可以快速上手MINA,学习如何创建会话管理、处理网络事件、实现自定义协议等。 `easymock-1.2_Java1.3.jar`和`easymock-1.2_Java1.3-sources.jar`是EasyMock的早期版本,一个流行的Java单元测试...

    Apache MINA java UDP例子|byte数组

    最近做rfid读写,C#和java都用udp不用厂家的动态库,udp自己写也简单,但是试了一下Apache mina ,接收的不是string,二十byte[] 数组,简单实现了UDP,网上也有例子,但是不是我要的。可用。

    niosocket及其开源框架MINA学习总结收集.pdf

    MINA (Java Multithreaded Network Application Framework) 是一个基于NIO的开源框架,它为开发高性能、高可用性的网络应用提供了抽象层。MINA 提供了事件驱动的模型,简化了网络编程的复杂性,开发者可以通过编写...

    mina 实现简单通讯

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,用于构建高性能、高可用性的网络应用程序,特别是TCP和UDP协议的应用。MINA 提供了一种抽象层,使得开发者可以专注于应用逻辑...

    mina2服务端客户端实例,保证能够正常运行

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,主要设计用于开发高性能、高可用性的网络应用程序。MINA提供了一种与传输协议无关的抽象层,使得开发者可以轻松地构建基于TCP...

    Mina 实例 包含jar包

    在压缩包中的"Mina例子",可能是以源码形式提供的一系列Mina应用场景,例如简单的Echo服务、文件传输服务等。通过阅读和运行这些示例,开发者可以快速了解Mina的工作机制,并学习如何在自己的项目中应用。 总的来说...

    mina 断网 断电

    Mina是一个开源的Java网络应用框架,常用于创建高性能、高可用性的网络服务器,如TCP/IP和UDP通信。 **描述分析:** 描述中提到,该示例是通过Mina作为服务端来处理客户端的断网和断电情况。这通常涉及到网络连接的...

    Mina简单小例

    Apache Mina是一个用Java编写的网络通信框架,它简化了创建高性能、高可用性的网络应用。在这个例子中,我们可能会看到如何使用Mina来建立服务器和客户端之间的通信。 在描述中提到的链接是一个博客文章,虽然没有...

    mina中文开发手册.pdf

    Apache Mina是一个高性能的网络应用框架,用于简化网络编程。Mina通过提供一个抽象层来帮助开发者构建可扩展的网络应用,这些应用可以是基于TCP/IP或UDP/IP协议的服务器和客户端。Mina使用Java NIO(New I/O)作为...

    Mina基础(二)

    Apache Mina是一个开源的网络通信框架,它为Java开发者提供了构建高性能、高可用性的网络应用程序的工具。在本篇文章中,我们将深入探讨Mina的核心概念和关键特性,以及如何通过实例应用"MinaDemo03"来更好地理解其...

    一个简单的ssh框架登陆小例子

    在Java开发中,我们可以使用多种库来实现SSH连接,如JSch、Apache MINA或JCraft。这个例子很可能是使用JSch库,因为它是Java中常用的SSH库,可以方便地进行SSH连接、文件传输和远程执行命令。 下面是一些关于SSH...

    短消息发送库C#例子代码

    总结起来,"短消息发送库C#例子代码"是一个基于C#的短信发送解决方案,利用事件驱动编程模型,自动识别通信端口,并且专为上海蓝峰电子的GSM modem设计。通过理解和应用这个库,开发者可以轻松地在自己的C#应用程序...

    dubbo例子(注册中心,消费者,提供者)

    当Consumer有多个可用的Provider时,可以根据这些策略选择一个合适的实例进行调用,以分摊服务压力。 7. **监控与管理**:Dubbo还提供了服务治理功能,如服务降级、熔断、限流等,以应对高并发、故障恢复等场景。...

Global site tag (gtag.js) - Google Analytics