`
8366
  • 浏览: 812808 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Apache Mina Server 2.0 抢鲜体验

阅读更多

          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、JAVASocket、JAVA 线程及并发库(java.util.concurrent.*)的知识。Mina 同时提供了网络通信的Server 端、Client 端的封装,无论是哪端,Mina 在整个网通通信结构中都处于如下的位置:

 

 

 

 

 

可见Mina 的API 将真正的网络通信与我们的应用程序隔离开来,你只需要关心你要发送、接收的数据以及你的业务逻辑即可。同样的,无论是哪端,Mina 的执行流程如下所示:

 

 

 

 

(1.) IoService:这个接口在一个线程上负责套接字的建立,拥有自己的Selector,监听是否有连接被建立。


(2.) IoProcessor:这个接口在另一个线程上负责检查是否有数据在通道上读写,也就是说它也拥有自己的Selector,这是与我们使用JAVA NIO 编码时的一个不同之处,通常在JAVA NIO 编码中,我们都是使用一个Selector,也就是不区分IoService与IoProcessor 两个功能接口。另外,IoProcessor 负责调用注册在IoService 上的过滤器,并在过滤器链之后调用IoHandler。


(3.) IoFilter:这个接口定义一组拦截器,这些拦截器可以包括日志输出、黑名单过滤、数据的编码(write 方向)与解码(read 方向)等功能,其中数据的encode 与decode是最为重要的、也是你在使用Mina 时最主要关注的地方。


(4.) IoHandler:这个接口负责编写业务逻辑,也就是接收、发送数据的地方。

 

 

 

Mina自带的过滤器(部分)

 

 

 

 

下面我们写一个 例子 :1个mina 的客户端和服务器端,完成双方的通讯,并且服务器端是使用了 mina的 BlacklistFilter 黑名单过滤器,用来防止非法的客户端的访问

 

 

 

服务器端:MinaTimeServer.java

 

 

package cn.com.xinli.mina;
import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import java.util.Date;

import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.firewall.BlacklistFilter;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

public class MinaTimeServer {   
  
    public static final int PORT = 9123;   
   
    public static void main(String[] args)throws IOException {   
           
        IoAcceptor acceptor = new NioSocketAcceptor();   
        BlacklistFilter blacklistFilter=new BlacklistFilter();
        InetAddress[] address= new InetAddress[1];
        address[0]=InetAddress.getByName("169.254.11.186");
        blacklistFilter.setBlacklist(address);
        acceptor.getFilterChain().addFirst("black",blacklistFilter); 
        acceptor.getFilterChain().addLast("logger", new LoggingFilter()); 
        
        acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("GBK"))));   
        acceptor.setHandler(new TimeServerHandler());   
        
        acceptor.getSessionConfig().setReadBufferSize(2048);   
        acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);   
           
        acceptor.bind(new InetSocketAddress(PORT));   
        
        System.out.println("MINA Time Server started,bind port:"+PORT);   
    }   
}   
  
class TimeServerHandler extends IoHandlerAdapter   
{   
	
    @Override 
    public void exceptionCaught(IoSession session,Throwable cause)throws Exception   
    {   
    	
        cause.printStackTrace();   
    } 
    
    
	@Override  
    public void messageReceived(IoSession session,Object message)throws Exception   
    {   
    	
        String str = message.toString();  
        System.out.println("str:"+str);
        if(str.trim().equalsIgnoreCase("quit"))   
        {   
            session.close(true);  
            return;   
        }   
        Date date = new Date();   
        session.write(date.toString());   
        System.out.println("Message written...");
        session.close(true);
    }   
    @Override  
    public void sessionIdle(IoSession session,IdleStatus status)throws Exception   
    {   
        System.out.println("IDLE " + session.getIdleCount(status));   
    }


	@Override
	public void messageSent(IoSession session, Object message) throws Exception
	{
		// TODO Auto-generated method stub
		super.messageSent(session, message);
	}   
}  

 

客户端:MinaTimeClinet.java

 

package cn.com.xinli.mina;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;

import org.apache.mina.core.service.IoConnector;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.LineDelimiter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.firewall.BlacklistFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class MinaTimeClinet
{
	public static void main(String[] args)
	{
		IoConnector connector=new NioSocketConnector();
		connector.setConnectTimeoutMillis(30000);
		connector.getFilterChain().addLast("codec",
		new ProtocolCodecFilter(
		new TextLineCodecFactory(
		Charset.forName("GBK")
//		LineDelimiter.WINDOWS.getValue(),
//		LineDelimiter.WINDOWS.getValue()
		)
		)
		);
		
		connector.setHandler(new ClientHandler("你好!\r\n 大家好!"));
	
		connector.connect(new InetSocketAddress("localhost", 9123));
		connector.dispose();
		
		
		}

		
	
}
class ClientHandler extends IoHandlerAdapter 
{
	
	private final String values;
	public ClientHandler(String values)
	{
		this.values = values;
	}
	@Override
	public void sessionOpened(IoSession session)
	{
		
		session.write(values);
		//session.close(true);
		//return;
	}
	
}

 

 

 运行结果:

 

MINA Time Server started,bind port:9123
0    [NioProcessor-1] INFO  org.apache.mina.filter.logging.LoggingFilter(158) - CREATED
0    [NioProcessor-1] INFO  org.apache.mina.filter.logging.LoggingFilter(158) - OPENED
63   [NioProcessor-1] INFO  org.apache.mina.filter.logging.LoggingFilter(140) - RECEIVED: HeapBuffer[pos=0 lim=18 cap=2048: C4 E3 BA C3 A3 A1 0D 0A 20 B4 F3 BC D2 BA C3 A3...]
str:你好!
Message written...
str: 大家好!
Message written...
94   [NioProcessor-1] INFO  org.apache.mina.filter.logging.LoggingFilter(140) - SENT: HeapBuffer[pos=0 lim=29 cap=32: 53 75 6E 20 4A 61 6E 20 31 30 20 31 33 3A 33 37...]
94   [NioProcessor-1] INFO  org.apache.mina.filter.logging.LoggingFilter(140) - SENT: HeapBuffer[pos=0 lim=0 cap=0: empty]
125  [NioProcessor-1] INFO  org.apache.mina.filter.logging.LoggingFilter(158) - CLOSED

 

如果客户端使用的黑名单中的IP,则服务器端 拒绝连接:

 

 

MINA Time Server started,bind port:9123
0    [NioProcessor-1] WARN  org.apache.mina.filter.firewall.BlacklistFilter(230) - Remote address in the blacklist; closing.
0    [NioProcessor-1] WARN  org.apache.mina.filter.firewall.BlacklistFilter(230) - Remote address in the blacklist; closing.
0    [NioProcessor-1] WARN  org.apache.mina.filter.firewall.BlacklistFilter(230) - Remote address in the blacklist; closing.

 

 

 附件中是整个工程,放在eclipse可以直接运行

 

 

 

分享到:
评论

相关推荐

    Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)

    Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)

    Apache Mina Server 2.0 中文参考手册

    Apache Mina Server 2.0 是一个强大的网络通信框架,主要基于Java NIO技术,用于构建高性能、可扩展的TCP和UDP应用程序,同时也支持串口通信。Mina的核心特性包括非阻塞的异步传输模式,事件驱动机制,批量数据处理...

    这是Apache Mina Server 2.0的中文参考手册,版本为1.0

    在本手册中,我们将深入探讨Apache Mina Server 2.0的各个方面,帮助初学者快速掌握其核心概念和使用方法。 首先,让我们了解Mina的基本架构。Mina采用事件驱动和非阻塞I/O模型,这种设计使得它能够在处理大量并发...

    Apache Mina Server 2.0 参考手册

    Apache Mina Server 2.0 是一款强大的网络通信框架,专为构建高性能、高可扩展性的网络应用而设计。它支持TCP/IP、UDP/IP协议栈以及其他通信方式,如JAVA对象的序列化和虚拟机管道通信。Mina的核心特性是其事件驱动...

    Apache Mina Server 2.0 中文参考手册(带目录)

    总之,Apache Mina Server 2.0是一个功能强大的网络通信框架,它简化了网络编程的复杂性,提供了高性能、异步IO模型,并支持丰富的扩展功能。开发者可以在掌握Java并发编程和网络编程的基础之上,利用Mina来开发出...

    Apache_Mina_Server_2.0中文参考手册

    Apache Mina Server 2.0是一款强大的网络应用框架,它为开发者提供了构建高性能、高并发的网络服务的能力。这个框架的核心理念是简化网络通信的复杂性,让开发者能够专注于业务逻辑,而不是底层的网络协议实现。...

    Apache_Mina_Server_2.0V1.0.rar_mina

    Apache Mina Server 2.0 是一个高性能、可扩展的网络通信框架,广泛应用于开发网络应用服务器,如TCP/IP和UDP服务。这个压缩包“Apache_Mina_Server_2.0V1.0.rar_mina”包含了Apache Mina Server 2.0的中文参考手册...

    Apache_Mina_Server_2.0中文参考手册V1.0.pdf

    ### Apache Mina Server 2.0 中文参考手册 V1.0 #### 一、Apache Mina Server 简介 Apache Mina Server 是一款强大的网络通信应用框架,旨在简化基于 TCP/IP 和 UDP/IP 协议栈的网络通信程序开发。它支持多种通信...

    Apache_Mina_Server_2.0中文参考手册.pdf

    综上所述,Apache Mina Server 2.0 中文参考手册是学习和使用 Mina 2.0 的重要资源,它详细阐述了如何借助 Mina 这个网络通信框架快速构建出高性能的网络应用,并通过实例展示了如何搭建一个简单的 TCP 服务器。...

    Apache_Mina_Server_2.0.rar_mina

    这个压缩包文件包含的是"Apache Mina Server 2.0"的中文参考手册,版本为V1.0,对于理解和使用Mina服务器非常有帮助。 Apache Mina的核心特性包括: 1. **异步事件驱动**:Mina采用非阻塞I/O模型,利用Java NIO...

    Apache_Mina_Server_2.0_V1.0.rar_apache_apache中文手册_mina

    本手册“Apache Mina Server 2.0中文参考手册V1.0”提供了对 Mina 2.0 版本的详细解析,旨在帮助开发者更好地理解和运用这个强大的工具。 Apache Mina 提供了一个统一的接口来处理多种类型的网络协议,如TCP/IP、...

    Apache MINA 2.0 用户指南( 缺第一章节)

    ### Apache MINA 2.0 用户指南:基础知识 #### 基础概念介绍 Apache MINA 2.0 是一款高性能且易于使用的网络应用程序框架,它简化了开发人员在网络编程方面的负担,允许开发者专注于应用程序的核心功能,而不是底层...

    Apache_Mina_Server_2.0中文参考手册V1.0

    Apache Mina Server 2.0 是一个高性能、可扩展的网络通信框架,广泛应用于开发网络应用服务器,如TCP/IP和UDP协议的服务器。这个中文参考手册V1.0旨在为开发者提供详细的指导,帮助他们更好地理解和使用Apache Mina ...

    Apache_Mina_Server_2.0文档

    ### Apache Mina Server 2.0:网络通信框架的核心知识点 #### 一、Apache Mina Server简介 Apache Mina Server是一款高性能、可扩展的网络通信框架,主要针对基于TCP/IP和UDP/IP协议栈的通信需求。它不仅支持传统...

    Apache-Mina-Server-2.0中文参考手册V1.0.docx

    Apache Mina Server 2.0 是一款强大的网络通信框架,主要设计用于构建高性能、高度可扩展的网络应用程序。它的核心特点在于提供事件驱动和异步IO操作,这得益于其默认基于Java NIO(非阻塞I/O)的底层实现。Mina有两...

    Apache.Mina.Server.2.0.中文参考手册_李海峰

    ### Apache Mina Server 2.0 中文参考手册知识点概览 #### 一、Mina简介 Apache Mina Server是一款高性能、易于使用的网络通信框架,主要用于构建基于TCP/IP或UDP/IP协议的应用程序。该框架的核心优势在于其能够...

Global site tag (gtag.js) - Google Analytics