Apache Mina 入门实例.docx_第1页
Apache Mina 入门实例.docx_第2页
Apache Mina 入门实例.docx_第3页
Apache Mina 入门实例.docx_第4页
Apache Mina 入门实例.docx_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Apache Mina 入门实例August 15, 2014这个教程是介绍使用Mina搭建基础示例。这个教程内容是以创建一个时间服务器。以下是这个教程需要准备的东西: MINA 2.0.7 Core JDK 1.5 或更高 SLF4J1.3.0 或更高 Log4J 1.2 用户: slf4j-api.jar, slf4j-log4j12.jar, 和Log4J 1.2.x Log4J 1.3 用户: slf4j-api.jar, slf4j-log4j13.jar, 和Log4J 1.3.x java.util.logging 用户: slf4j-api.jar 和slf4j-jdk14.jar 重要提醒:请确认你使用的slf4j-*.jar和你的logging框架匹配。举个板栗,slf4j-log4j12.jar 和 log4j-1.3.x.jar 是不能混在一起用的,否则会出问题。创建一个MINA时间服务We will begin by creating a file called MinaTimeServer.java我们创建一个文件名为MinaTimeServer.java,文件内容如下:public class MinaTimeServer public static void main( String args ) /还没有东西呢 上面的代码应该不用解释了吧,为了创建我们的服务,我们需要一个监听传入连接的对象,由于我们的项目是基于TCP/IP,所以需要一个SocketAcceptor对象来帮我们处理。import org.apache.mina.core.service.IoAcceptor;import org.apache.mina.transport.socket.nio.NioSocketAcceptor;public class MinaTimeServer public static void main( String args ) IoAcceptor acceptor = new NioSocketAcceptor(); 创建好后,我们可以定义处理请求的类,和指定监听的端口等。接下来,我们需要在配置里添加几个过滤器。第一个是logger,这个过滤器用来记录所有的信息,比如创建session(会话),接收消息,发送消息,关闭会话等。第二个是ProtocolCodecFilter(协议编解码过滤器).这个过滤器用来转换二进制或协议的专用数据到消息对象中, 反之亦然。我们这里使用一个已经存在的TextLine工厂,因为我们这里只处理一些文字消息(你不需要再去写编解码部分)。import java.nio.charset.Charset;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 MinaTimeServer public static void main( String args ) IoAcceptor acceptor = new NioSocketAcceptor(); acceptor.getFilterChain().addLast( logger, new LoggingFilter() ); acceptor.getFilterChain().addLast( codec, new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( UTF-8 ); For this tutorial, we will extend the class IoHandlerAdapter. This is a class that follows the adapter design pattern which simplifies the amount of code that needs to be written in order to satisfy the requirement of passing in a class that implements the IoHandler interface.接下来我们需要创建一个handler来实时处理客户端的连接和请求,这个handler类必须实现IoHandler这个接口。对于所有使用MINA的程序来说,主要的负荷都在这个文件,它为所有客户端请求提供服务。在这个例子中,我们将扩展IoHandlerAdapter类。这是一个遵从适配器模式的类,帮我们简化了很多为了去实现IoHandler接口的代码。import java.io.IOException;import java.nio.charset.Charset;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 MinaTimeServer 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( UTF-8 ); acceptor.setHandler( new TimeServerHandler() ); 现在我们要添加一些NioSocketAcceptor配置,这将允许我们设置特殊的socket设置来接收客户端的连接。import java.io.IOException;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 MinaTimeServer 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( UTF-8 ); acceptor.setHandler( new TimeServerHandler() ); acceptor.getSessionConfig().setReadBufferSize( 2048 ); acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 ); 这有两行新代码,这些方法是用来为会话设置IoHandler,输入缓冲区的大小和空闲等待时间。需要指定缓冲区大小来告诉底层操作系统为传入的数据分配多少的空间。第二行指定多少时间没有读写操作就进入空闲状态。handler的代码如下:import java.util.Date;import org.apache.mina.core.session.IdleStatus;import org.apache.mina.core.service.IoHandlerAdapter;import org.apache.mina.core.session.IoSession;public 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(); if( str.trim().equalsIgnoreCase(quit) ) session.close(); return; Date date = new Date(); session.write( date.toString() ); System.out.println(Message written.); Override public void sessionIdle( IoSession session, IdleStatus status ) throws Exception System.out.println( IDLE + session.getIdleCount( status ); 这个类中一般有exceptionCaught,messageReceived和sessionIdle这几个方法。exceptionCaught应该总是在handler中定义,来处理一些异常情况,否则异常信息将无法捕捉。exceptionCaught方法简单地打印了错误的堆栈跟踪和关闭会话。对于大多数程序,这将是标准的做法,除非处理程序可以从异常状态中恢复。messageReceived 方法来处理从客户端接收到的数据,这里是将当前时间返回给客户端,当收到quit时,会话将被关闭,也会返回一个当前时间给客户端。根据所使用的协议编解码器,object这个参数传递的类型有所不同,以及返回的数据时的session.write(Object)也不同。如果不指定协议的编解码器,你将收到一个类型为IoBuffer的对象,返回的数据也要求是IoBuffer。The sessionIdle method will be called once a session has remained idle for the amount of time specified in the call acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );.sessionIdle方法将定时调用一次会话,保持空闲状态。通过调用acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );来设定时间间隔。所有剩下要做的就是定义套接字地址,该服务器将侦听,实际接入时才会启动服务。import java.io.IOException;import .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.TextLineCodecFactory;import org.apache.mina.filter.logging.LoggingFilter;import org.apache.mina.transport.socket.nio.NioSocketAcceptor;public class MinaTimeServer private static final int PORT = 9123; public static void main( String args ) throws IOException IoAcceptor acceptor = new NioSocke

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论