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

基于Apache Mina的一个简单应用

 
阅读更多

1、前言

Apache MINA是Apache组织的一个优秀的项目。MINA是Multipurpose Infrastructure forNetwork Applications的缩写。它是一个网络应用程序框架,用来帮助用户非常方便地开发高性能和高可靠性的网络应用程序。在本文中介绍了如何通过Apache Mina2.0来创建一个简单的TCP协议Client/Server应用。

2、Apache Mina简介

Apache MINA是一个网络应用程序框架,它对Java中的socket和NIO进行了有效和清晰的封装,方便开发人员开发TCP/UDP程序,从而抛开在使用原始的socket时需要考虑的各种繁杂而又烦人问题(比如线程、性能、会话等),把更多精力专著在应用中的业务逻辑开发上。

3、需要的资源

需要的jar包:

1.mina-core-2.0.4.jar

2.slf4j-api-1.6.1.jar

3.slf4j-jdk14-1.6.1.jar

4、服务端程序

在服务端有两个类:MinaServer和MinaServerHandler。

MinaServer类是服务端的入口,它包含一个名为“IoAcceptor”的接口用来接收服务端的请求,并且触发处理器事件。定义了两个过滤器:日志过滤器和编码过滤器。

MinaServer.java

package tcp.mina.demo.server;

import java.io.IOException;

import java.net.InetSocketAddress;

import java.nio.charset.Charset;

import org.apache.mina.core.session.IdleStatus;

import org.apache.mina.core.service.IoAcceptor;

import org.apache.mina.filter.codec.ProtocolCodecFilter;

import org.apache.mina.filter.codec.textline.TextLineCodecFactory;

import org.apache.mina.filter.logging.LoggingFilter;

import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

public class MinaServer{

private static final int PORT = 1234;

public static void main(String[] args) throws IOException {

IoAcceptor acceptor = new NioSocketAcceptor();

acceptor.getFilterChain().addLast("logger", new LoggingFilter());

acceptor.getFilterChain().addLast("codec", newProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));

acceptor.setHandler(new MinaServerHandler());

acceptor.getSessionConfig().setReadBufferSize(2048);

acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);

acceptor.bind(new InetSocketAddress(PORT));

System.out.println("server islistenig at port : " + PORT);

}

}

MinaServerHandler类是服务端的消息处理类,其中名为“messageReceived”的方法是处理服务端接收到的数据。

MinaServerHandler.java

package tcp.mina.demo.server;

import org.apache.mina.core.session.IdleStatus;

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

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

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

public class MinaServerHandlerextends IoHandlerAdapter {

private final Logger logger = (Logger) LoggerFactory.getLogger(getClass());

@Override

public void sessionOpened(IoSession session) {

// set idle time to 10seconds

session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);

}

@Override

public void messageReceived(IoSession session, Object message) {

logger.info("Messagereceived in the server..");

logger.info("Message is:" + message.toString());

}

@Override

public void sessionIdle(IoSession session, IdleStatus status) {

logger.info("Disconnectingthe idle.");

// disconnect an idle client

session.close(true);

}

@Override

public void exceptionCaught(IoSession session, Throwable cause) {

// close the connection onexceptional situation

logger.warn(cause.getMessage(), cause);

session.close(true);

}

}

5、客户端程序

在客户端有两个类:MinaClient和MinaClientHandler。

MinaClient类是客户端的入口,它包含一个名为“IoConnector”的接口用来向服务端发起连接请求,并且触发处理器事件。定义了两个过滤器:日志过滤器和编码过滤器。连接成功后使用“ConnectFuture”将异步执行转换为同步执行。

MinaClient.java

package tcp.mina.demo.client;

import java.io.IOException;

import java.net.InetSocketAddress;

import java.nio.charset.Charset;

import org.apache.mina.core.future.ConnectFuture;

import org.apache.mina.core.service.IoConnector;

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.logging.LoggingFilter;

import org.apache.mina.transport.socket.nio.NioSocketConnector;

public class MinaClient {

private static final int PORT = 1234;

public static void main(String[] args) throws IOException,InterruptedException {

IoConnector connector = new NioSocketConnector();

connector.getSessionConfig().setReadBufferSize(2048);

connector.getFilterChain().addLast("logger", new LoggingFilter());

connector.getFilterChain().addLast("codec", newProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));

connector.setHandler(new MinaClientHandler("Hello Server.."));

ConnectFuture future = connector.connect(new InetSocketAddress("127.0.0.1", PORT));

future.awaitUninterruptibly();

if (!future.isConnected()) {

return;

}

IoSession session = future.getSession();

session.getConfig().setUseReadOperation(true);

session.getCloseFuture().awaitUninterruptibly();

System.out.println("AfterWriting");

connector.dispose();

}

}

MinaClientHandler类是客户端的消息处理类,其中名为“messageReceived”的方法是处理客户端接收到的数据。在“sessionOpened”方法中使用session.write(values);发送消息。

MinaClientHandler.java

package tcp.mina.demo.client;

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

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

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

public class MinaClientHandler extends IoHandlerAdapter {

private final Logger logger = (Logger) LoggerFactory.getLogger(getClass());

private final String values;

public MinaClientHandler(String values) {

this.values = values;

}

@Override

public void sessionOpened(IoSession session) {

session.write(values);

}

@Override

public void messageReceived(IoSession session, Object message) {

logger.info("Messagereceived in the client..");

logger.info("Message is:" + message.toString());

}

@Override

public void exceptionCaught(IoSession session, Throwable cause) {

logger.warn(cause.getMessage(), cause);

session.close(true);

}

}

6、总结

通过本文中的例子,我们可以看到使用Apache Mina可非常方便的开发网络服务应用程序,可以隐藏处理底层I/O和线程并发等复杂工作。除此之外MINA框架还具有很多特点:基于java NIO类库开发;采用非阻塞方式的异步传输;事件驱动;支持批量数据传输;支持TCP、UDP协议;控制反转的设计模式(支持Spring);采用优雅的松耦合架构;可灵活的加载过滤器机制;单元测试更容易实现;可自定义线程的数量,以提高运行于多处理器上的性能;采用回调的方式完成调用,线程的使用更容易。

7、参考资料

http://www.techbrainwave.com/?p=912

http://log-cd.iteye.com/blog/519408

http://blog.whhpaccp.com/?post=409


分享到:
评论

相关推荐

    apache-mina-2.0.4.rar_apache mina_mina

    Apache Mina是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个"apache-mina-2.0.4.rar"压缩包包含的是Apache Mina 2.0.4版本的源代码,是深入理解和定制Mina的...

    (源码)基于Apache Mina框架的短信通信系统.zip

    本项目是一个基于Apache Mina框架的短信通信系统,主要用于实现高性能、高扩展性的网络通信应用。Apache Mina Server是一个网络通信应用框架,支持TCPIP、UDPIP协议栈的通信,并提供了事件驱动、异步操作的编程模型...

    Apache Mina2服务器和客户端简单实例

    在本实例中,我们将探讨如何使用Apache Mina2构建一个简单的服务器和客户端。 首先,让我们了解一下Mina2的核心概念。Mina2基于Java NIO(Non-blocking I/O)库,提供了异步I/O操作,这意味着它不会因为等待数据而...

    Apache Mina帮助文档

    Apache Mina是一个高度可扩展的网络通信框架,主要用于构建高性能、高效率的服务端应用程序。它提供了事件驱动、异步I/O处理模型,使得开发者能够更专注于业务逻辑,而不是底层网络编程的复杂性。Mina主要应用于Java...

    apache Mina的完整学习资料

    Apache Mina的核心理念是提供一个与传输协议无关的抽象层,开发者可以通过它来开发基于TCP/IP、UDP或其他网络协议的应用。Mina简化了网络编程的复杂性,使得开发者可以专注于业务逻辑,而无需关注底层通信细节。 在...

    Apache Mina 入门Demo

    通过分析这个Demo,我们可以了解到如何实际搭建一个简单的Mina应用。 8. **实战经验**:博主royal2xiaose的博客文章可能分享了如何使用Mina创建一个基础的网络服务,包括项目的初始化、编写过滤器、处理数据等步骤...

    apache mina实例免费下载

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个开源框架,主要设计用于简化网络应用程序的开发,尤其是基于TCP和UDP协议的应用。它提供了高度可扩展和高性能的非阻塞I/O模型,使得...

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

    以上代码展示了如何使用 MINA 创建一个简单的 TCP 服务器和客户端。通过这种方式,开发者可以快速搭建网络应用程序,而无需关心复杂的底层网络细节。在未来的学习过程中,我们将更深入地探索 MINA 的高级特性,如...

    基于Apache Mina实现的TCP长连接和短连接实例

    Apache Mina是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在这个实例中,我们将深入探讨如何利用Apache Mina实现TCP的长连接和短连接。 首先,TCP(传输控制协议...

    Apache Mina简单实例

    在本文中,我们将通过一个简单的实例来探讨如何使用Apache Mina进行网络通信。 首先,Apache Mina的核心是它的事件驱动模型,它允许开发者以非阻塞的方式处理I/O操作。这种模型在处理大量并发连接时效率很高,因为...

    Apache mina2学习笔记DEMO

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,专为高性能、异步网络应用程序设计。MINA 提供了一套高级的网络通信抽象层,简化了开发过程,特别是对于处理TCP/IP和UDP/IP...

    Apache Mina Server 是一个网络通信应用框架

    Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高...

    apache mina 简单示例

    通过编写一个简单的示例,你可以更好地了解如何设置项目、创建服务端和客户端、定义过滤器以及处理网络事件。同时,不要忘记考虑异常处理和性能优化,这些在实际项目中都是至关重要的。在实践中不断探索和调试,将有...

    Android-基于ApacheMINA进行封装实现AndroidAPP作为服务器客户端进行通讯

    本项目“Android-基于Apache MINA进行封装实现Android APP作为服务器客户端进行通讯”正是利用MINA库来构建Android应用的网络通信功能。 Apache MINA的核心优势在于其非阻塞I/O(Non-blocking I/O)模型,这种模型...

    apache mina 学习笔记三(子项目FtpServer)

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,用于构建高性能、高可用性的网络应用程序。MINA 提供了一种简单而强大的API,开发者可以使用它来处理TCP/IP和UDP/IP协议,如...

    Apache Mina核心jar包:mina-core-2.0.7

    Apache MINA是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。 当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版...

    Apache MINA框架相关资料

    4. **MINA和Spring整合**(MINA和spring整合.txt):Spring是一个广泛使用的Java应用框架,而MINA与Spring的整合使得开发者可以利用Spring的依赖注入和管理功能来简化MINA应用的开发。这份文档可能详细阐述了如何在...

    Apache MINA 线程模型配置

    Apache MINA 是一个用于构建网络应用程序的高性能、高可靠性的框架。它提供了丰富的功能来简化网络编程,包括TCP/IP 和 UDP/IP 协议的支持。线程模型是 MINA 的核心组成部分之一,负责管理 I/O 操作中的线程分配与...

    apache mina-spring 服务端程序

    Apache Mina是一个高度可扩展的网络通信框架,主要用于构建高性能、高并发的网络应用程序,如服务器端应用。它提供了一种简单而强大的编程模型,使得开发者可以专注于业务逻辑,而不是底层的网络通信细节。Spring...

Global site tag (gtag.js) - Google Analytics