`
zhaohaolin
  • 浏览: 983759 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

基于MINA构建简单高性能的NIO应用-一个简单的例子<转>

    博客分类:
  • Mina
阅读更多
19 February 2010

本文为Sparkle发于《程序员》2008年2月刊的文章,与《程序员》的协议,可以在个人博客中发布,转载请保留出处。

一个简单的例子

MINA使用非常简单,笔者以前做过一段时间传统的Java Socket开发,不过一直对Java NIO不是很理解,但是MINA很快就上手了,MINA封装了NIO繁琐的部分,使你可以更专注于业务功能实现。话不多说,让我们来看一个简单的例子,一个很常见的例子,时间服务器。(Article by Sparkle) 我们的实现目标是一个能响应多个客户端的请求,然后返回服务器当前的系统时间的功能。传统的Java Socket程序,我们需要每accept一个客户端连接,就创建一个新的线程来响应,这会令到系统整体负载能力有较大的限制,而且我们必须手工编写连接管理等代码。让我们来看看MINA是怎么处理的。

首先我们从官方网站下载MINA 1.1,这里我们假设JDK为1.5以上的版本,如果你使用的是JDK 1.4,请下载MINA 1.0,MINA 1.0跟1.1几乎一样,但是强烈建议使用JDK 1.5以上以获得更好的性能。 解开压缩包之后,能看见很多jar包,这里暂不介绍每个包的具体作用,可以把所有包都导入项目。值得留意的是MINA使用了一个slf4j的日志库,该日志库大有取缔common-logging之势。

public class TimeServer {
  public static void main(String[] args) throws IOException {
    IoAcceptor acceptor = new SocketAcceptor();

    SocketAcceptorConfig cfg = new SocketAcceptorConfig();
    cfg.getFilterChain().addLast( "logger", new LoggingFilter() );
    cfg.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory()));

    acceptor.bind( new InetSocketAddress(8123), new TimeServerHandler(), cfg);
    System.out.println("Time server started.");
  }
}

这里是我们的主程序,非常简单。 首先我们需要一个IoAcceptor,这里我们选择了一个SocketAcceptor,也就是TCP协议。 然后,我们给应用加上日志过滤器和协议编码过滤器。(Article by Sparkle) 最后,我们把acceptor bind到本机的8123端口,并且使用TimeServerHandler来实现协议。

TimeServerHandler是我们实现具体业务功能的地方。

public class TimeServerHandler extends IoHandlerAdapter {
  public void messageReceived(IoSession session, Object msg) throws Exception {
    String str = (String) msg;
    if( "quit".equalsIgnoreCase(str) ) {
    session.close();
    return;
  }

  Date date = new Date();
  session.write( date.toString() );
  System.out.println("Message written...");
  }

  public void sessionCreated(IoSession session) throws Exception {
  System.out.println("Session created...");
  }
}

IoHandlerAdapter提供了7个事件方法,我们要做的事情仅仅是挑选我们需要做出响应的事件进行重载。在我这个例子了,我重载了两个方法。sessionCreated会在客户端连接的时候调用,通常我们会在这里进行一些初始化操作,我这里仅仅是打印一条信息。messageReceived就是整个Handler的中心部分,每一个从客户端发过来的消息都会转化成对该方法的调用。由于我们加入了协议编码过滤器,因此这里获得的Object msg是一个String,而不是默认的ByteBuffer(下文会详细介绍ProtocolCodecFilter)。这里我们实现了一个很简单的业务功能,如果用户输入的是quit,就断开连接,否则就输入当前时间。可以看出,IoSession封装了对当前连接的操作。

至此,我们就实现了一个时间服务器。

文章快速索引

  1. 前言
  2. 一个简单的例子
  3. MINA架构
  4. 优化指南
分享到:
评论

相关推荐

    基于MINA构建高性能的NIO应用

    基于MINA构建高性能的NIO应用

    基于MINA构建简单高性能的NIO应用

    基于MINA构建简单高性能的NIO应用,提出了JAVA NIO在MINA上的简单应用

    基于MINA构建简单高性能的NIO应用_曾冠东

    基于MINA构建简单高性能的NIO应用,MINA的好东东

    基于MINA构建简单高性能的NIO应用.pdf

    包含用如何用MINA建立简单的NIO应用例子(一个时间服务器响应多个客户端的请求),以及和如何优化使你的NIO服务器达到性能最佳

    mina高性能Java网络框架 v2.1.3

    Apache MINA(Multipurpose Infrastructure for Network Applications) 是Apache组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的MINA版本支持基于Java NIO技术的TCP/...

    mina高性能Java网络框架-其他

    Apache MINA(Multipurpose Infrastructure for Network Applications) 是Apache组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的MINA版本支持基于Java NIO技术的TCP/...

    JAVA上百实例源码以及开源项目源代码

    Tcp服务端与客户端的JAVA实例源代码 2个目标文件 摘要:Java源码,文件操作,TCP,服务器 Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多...

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java开源包1

    xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的...

    Apache_Mina2.0学习笔记(初版).doc

    Apache的Mina(Multipurpose Infrastructure Networked Applications)是一个网络应用框架,可以帮助用户开发高性能和高扩展性的网络应用程序;它提供了一个抽象的、事件驱动的异步API,使Java NIO在各种传输协议...

    java开源包10

    xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的...

    轻量级网络通信框架nSocket.zip

    nSocket与mina、netty、xSocket这类高性能的设计不同之处在于,nSocket将直接使用java7中的异步通道构建异步操作,并在后期将弱化C/S模式,逐步过渡到P2P模式。 编写目的: 简化NIO开发过程,将业务与实现...

    java开源包11

    xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的...

    java开源包2

    xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的...

    java开源包3

    xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的...

    java开源包6

    xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的...

    java开源包5

    xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的...

    java开源包4

    xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的...

Global site tag (gtag.js) - Google Analytics