`
geeksun
  • 浏览: 965405 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MINA入门使用

 
阅读更多

MINA作为高效能的可应对高并发访问的NIO框架,特性就不多介绍了。下面提供一些使用的实例。

服务器端代码:

/**
 * Description 用来启动MINA服务端
 * @author Administrator
 * 2012-10-21
 */
public class MinaTimeServer {
	protected static Logger logger = LoggerFactory.getLogger(MinaTimeServer.class);  
	private static final int PORT = 9123;											// 定义监听端口

	public static void main(String[] args) throws IOException {
		//监听客户端的连接
		IoAcceptor acceptor = new NioSocketAcceptor();
		acceptor.getFilterChain().addLast("logger", new LoggingFilter());
		acceptor.getFilterChain().addLast(
				"codec",
				new ProtocolCodecFilter(new TextLineCodecFactory(Charset
						.forName("GBK"))));										// 指定编码过滤器
		acceptor.setHandler(new TimeServerHandler());								// 指定业务逻辑处理器
		// 在过滤器链中没有添加“threadPool”过滤器,则业务逻辑处理和IoProcessor使用同一个线程。如果设置了“threadPool”过滤器,
		// 则使用设置的线程池产生线程进行业务逻辑处理,
		acceptor.getFilterChain().addLast("threadPool", new ExecutorFilter(Executors.newCachedThreadPool()));
		acceptor.setDefaultLocalAddress(new InetSocketAddress(PORT));               // 设置端口号
		acceptor.bind();                                                            // 启动监听
	}
}

 服务器端程序的业务处理器:

/**
 * Description 业务逻辑处理器TimeServerHandler,继承自IoHandlerAdapter,
 * 实现的功能有:当客户端创建会话时会显示客户端设备的IP和端口;当客户端输入quit时结束会话;客户端输入其它内容时则向客户端发送当前时间。
 * @author Administrator
 * 2012-10-21
 */
public class TimeServerHandler extends IoHandlerAdapter {
	
	@Override
	public void sessionCreated(IoSession session) {
		//显示客户端的ip和端口
		System.out.println("Client IP:" + session.getRemoteAddress().toString());
	}

	@Override
	public void messageReceived(IoSession session, Object message)
			throws Exception {
		String str = message.toString();
		if (str.trim().equalsIgnoreCase("quit")) {
			//结束会话,断开连接
			session.close(true);
			return;
		}
		
		Date date = new Date();
		session.write("Server return to client: " + date.toString());															//返回当前时间的字符串 
		System.out.println("Message written..." + str);
	}
}

这时可以进行测试前面的代码,用命令行中输入:

telnet 127.0.0.1 9123

服务器端会收到客户端的连接信息,显示:

Client IP:/127.0.0.1:3815

然后在telent窗口中输入字符:test123

服务器端会打印:Message written...test123

客户端显示服务器端返回的信息:Server return to client: Sun Oct 21 17:22:09 CST 2012

可看出MINA的客户端和服务器端可以相互进行通信。
下面是MINA客户端的连接类代码:
/**
 * Description MinaTimeClient类用于连接服务端,并向服务端发送消息
 * @author Administrator 
 * 2012-10-21
 */
public class MinaTimeClient {

	public static void main(String[] args) {
		// 与服务端建立连接
		NioSocketConnector connector = new NioSocketConnector();
		connector.getFilterChain().addLast("logger", new LoggingFilter());
		connector.getFilterChain().addLast(
				"codec",
				new ProtocolCodecFilter(new TextLineCodecFactory(Charset
						.forName("UTF-8")))); 						// 设置编码过滤器
		connector.setConnectTimeout(30);
		connector.setHandler(new TimeClientHandler());					// 设置事件处理器
		ConnectFuture cf = connector.connect(new InetSocketAddress("127.0.0.1",
				9123));											// 建立连接
		cf.awaitUninterruptibly();										// 等待连接创建完成
		cf.getSession().write("hello");									// 发送消息
		cf.getSession().write("quit");									// 发送消息
		cf.getSession().getCloseFuture().awaitUninterruptibly();		// 等待连接断开
		connector.dispose();
	}
}
 客户端连接类用到的处理器代码:
/**
 * Description TimeClientHandler处理消息接收事件
 * @author Administrator 
 * 2012-10-21
 */
public class TimeClientHandler extends IoHandlerAdapter {

	public TimeClientHandler() {
	}

	@Override
	public void messageReceived(IoSession session, Object message)
			throws Exception {
		System.out.println("Client received message:" + message);													// 显示接收到的消息
	}
}
  启动程序测试:
开始->运行->cmd->tecnet 127.0.0.1 9123
通过JDK自带工具jvisualvm查看线程:

 可看到几个线程:
NioSocketAcceptor-1为服务器端监听端口9999通过线程池创建的一个线程。
NioProcessor-2为IoProcessor线程池创建的线程,用来IO处理。
pool-3-thread-3为过滤器配置的线程池创建的线程,用来业务逻辑处理。
 
  • 大小: 134.3 KB
分享到:
评论

相关推荐

    Apache Mina入门(完成版)

    通过深入学习这份“Apache Mina入门(完成版)”资料,你将掌握使用Mina框架开发网络服务的基本技能,为构建高性能的Java服务器端应用打下坚实的基础。同时,实践项目“minatest”将帮助你巩固理论知识,提升实际...

    mina入门实例

    这就是一个基础的Mina入门实例,展示了如何使用Mina进行客户端-服务器间的通信。随着深入学习,你可以了解更多的Mina特性,如心跳机制、多线程处理、会话管理等,以构建更复杂、高效的网络应用。

    mina入门例子

    本入门例子将带你了解如何使用MINA进行基本的网络通信应用开发。 首先,MINA的核心概念包括`Session`、`Filter`和`Handler`。`Session`代表一个网络连接,它是数据传输的通道;`Filter`是处理`Session`中数据的...

    Apache Mina 入门Demo

    通过深入学习和实践这个Apache Mina入门Demo,你将掌握如何利用Mina构建网络应用,并了解其核心特性和工作原理,这对于从事Java网络编程或者需要处理大规模并发连接的开发者来说是非常有价值的。

    Mina入门:mina版之HelloWorld

    在这个“Mina入门:Mina版之HelloWorld”教程中,我们将探讨如何使用Mina构建一个简单的网络通信应用。 首先,我们需要了解Mina的核心概念。Mina基于事件驱动和非阻塞I/O模型,这使得它在处理大量并发连接时表现...

    Mina框架入门介绍

    Apache Mina 框架是一个强大的网络通信框架,它的核心目标是简化开发高效...学习和使用Mina,开发者需要具备JAVA IO、JAVA NIO、Java Socket以及并发库的基础知识,这将有助于更好地理解和应用Mina框架提供的各种功能。

    ApacheMina入门(完成版)

    总之,Apache Mina为Java开发者提供了一个强大、灵活的网络通信框架,通过本文档中的"Apache Mina入门(完成版).pdf",你可以系统性地学习如何使用它来构建高效稳定的网络应用。通过实践和理解,你将能够熟练地驾驭...

    MINA_API+MINA_DOC+mina

    MINA (Java IO Network ...总的来说,这个压缩包为初学者提供了一套完整的MINA学习资源,涵盖了理论知识、API详解和实战指导,有助于开发者快速入门并精通MINA框架,从而在实际工作中实现高效、稳定的网络通信应用。

    mina 入门 教程

    3. **Mina入门步骤** - **设置环境**:首先,你需要在项目中引入Mina的依赖库,通常是通过Maven或Gradle来管理。 - **创建ProtocolCodecFactory**:定义数据编码和解码的规则,以便Mina可以正确处理网络传输的数据...

    Apache+Mina入门基础

    mina是一种高效的互联网网络通信架构,此资料为入门基础。

    Mina入门程序

    《Mina入门程序详解》 Mina(全称Apache MINA,即Multi-purpose Infrastructure for Network Applications)是一个开源的网络通信框架,它为Java开发者提供了一种高性能、易使用的网络编程工具。Mina允许开发者创建...

    Apache mina框架入门教程

    在这个例子中,我们使用`NioSocketAcceptor`作为IoService的实现,它对应于TCP服务器。通过配置`IoSessionConfig`,我们可以设置读取缓冲区大小和空闲时间,确保在无操作时能正确处理空闲连接。 ```java public ...

    Mina 2.0快速入门与源码解析

    ### Mina 2.0快速入门与源码解析 #### Mina 2.0 快速入门 Mina 2.0 是一个基于Java NIO技术的高效、可伸缩的网络通信框架,广泛应用于服务器端开发。Mina 2.0 的设计目标是为开发者提供一个易于使用的API,使得...

    Mina2.0入门

    **Mina2.0入门** Apache Mina是一个高度可扩展且功能强大的网络通信框架,它为Java应用程序提供了简单而统一的API来处理TCP/IP、UDP和SSL/TLS协议。Mina2.0作为其最新版本,引入了许多改进和优化,旨在提高性能、...

    mina框架的demo 入门,开发

    2. **Filter Chain**:Mina使用过滤器链来处理进来的消息。过滤器可以对数据进行预处理或后处理,如编码、解码、安全检查等,增强了系统的灵活性和可扩展性。 3. **Protocol Handlers**:协议处理器是用户自定义的...

Global site tag (gtag.js) - Google Analytics