Mina学习笔记(一)

 最近项目要用到Mina框架,就拿来学习一下:

1、通过相关资料了解到Mina大致分为三层

  • IoService:用来做IO操作
  • IoFilter:过滤器,做对象转换等
  • IoHandler:具体业务逻辑实现

 

 

了解到层次结构及大致流程后,首先还是helloWorld搞起来,Mina能够实现服务器端和客户端,先来搞一个服务端(需求是:主要实现接收请求,然后将接收到的字符打印出来):

1、创建mina-sayhello项目,为了简单,直接采用maven project,maven不了解的同学,网上资料很多,先贴上pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.hylandtec</groupId>
	<artifactId>mina-sayhello</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>mina-sayhello</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.apache.mina</groupId>
			<artifactId>mina-core</artifactId>
			<version>2.0.7</version>
		</dependency>
	</dependencies>
</project>

 

 2、创建IoService来接收IO处理,由于IoAcceptor继承了IoService,我们直接使用IoAcceptor:

package com.hylandtec.server;

import java.io.IOException;
import java.net.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.textline.LineDelimiter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

/**
 * Mina 服务器端应用 IoService.
 * 
 * @author boy
 */
public class MyServer {
	
	//设置监听端口
	private static final int SOCKET_PORT = 9999;

	public static void main(String[] args) {

		// 创建接收器
		IoAcceptor acceptor = new NioSocketAcceptor();
		// 设置缓冲区大小
		acceptor.getSessionConfig().setReadBufferSize(2048);
		// 设置空闲时间为10秒(无操作10秒进入空闲)
		acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);

		// 添加过滤器,注意不同系统换行符(可采用默认)
		acceptor.getFilterChain().addLast(
				"codec",
				new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"), 
						LineDelimiter.WINDOWS.getValue(),
						LineDelimiter.WINDOWS.getValue())));
		
		try {
			acceptor.bind(new InetSocketAddress(SOCKET_PORT));
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

}

 3、第二步来实现我们的业务逻辑,业务逻辑相对简单

package com.hylandtec.server.handler;

import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;

/**
 * Mina测试服务端业务逻辑实现类.
 * @author boy
 * 
 */
public class MyServerHandler extends IoHandlerAdapter{
	
	/**
	 * 重写messageReceived方法,打印输出接收到的字符
	 */
	@Override
	public void messageReceived(IoSession session, Object message)
			throws Exception {

		String str = message.toString();
		System.out.println(str);
		
		//如果接收到的字符为quit,则关闭seeion并退出
		if("quit".equals(str)) {
			session.close(true);
			return;
		}
		//super.messageReceived(session, message);
	}
}

 4、第三步,将handler实例添加到IoService中:

//添加业务逻辑处理
acceptor.setHandler(new MyServerHandler());

 5、由于目前还没有创建客户端,所以先用telnet(TCP协议),刚才开的端口是9999,所以直接打开DOS窗口,输入:telnet localhost 9999

6、连接上之后,输入hello world  敲回车,这时候会看到控制台打印出hello world,如果敲入quit,连接会自动关闭。

--十二点了,赶紧睡觉!!!

 

 

Apache Mina是一个用于开发高性能、高可扩展性网络应用程序的Java框架。它提供了一种简单和灵活的方式来构建基于TCP/IP和UDP/IP协议的客户端和服务器端应用。 在学习Apache Mina时,首先需要了解它的基本概念和架构。Mina采用了NIO(非阻塞IO)的方式来实现网络通信。它的核心组件是IoService,它负责接收客户端的连接请求,并将请求分发给对应的I/O处理器进行处理。而I/O处理器则负责实际的数据读写和业务逻辑的处理。 在使用Mina进行开发时,我们首先需要创建一个IoAcceptor对象来监听指定的端口,并设置相应的处理器。当有客户端发起连接请求时,IoAcceptor会接收并处理这些请求。同时,我们还需要编写相应的I/O处理器来对接收到的数据进行处理和响应。 Mina还提供了一些便捷的工具类和接口,以简化开发过程。例如,可以使用IoBuffer来处理数据的读写,它类似于Java NIO中的ByteBuffer。同时,Mina还提供了一些过滤器,可以在数据传输的过程中进行一些常用的操作,比如加密、压缩、编解码等。 值得一提的是,Mina支持多种编解码协议,包括自定义的协议。它可以根据指定的编解码规则将数据进行解析和组装。这在实际应用中非常实用,因为经常会遇到需要对传输的数据进行编码和解码的情况。 总的来说,学习Apache Mina需要了解其基本概念、架构和核心组件,并掌握基本的开发流程和常用的工具类和接口。通过学习Mina,我们可以更加方便地开发出高性能、高可扩展性的网络应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值