Apache MINA 快速入门指南_第1页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

1、apache mina 快速入门指南最近用到socket套接字编程,在服务器监听方面还没有详细思路,伴侣推举了apahce mina,就在官方看了一下迅速文档。原文是英文的,学习之余就将它翻译出来和大家分享!关于mina的中文简介内容不多就摘抄了一些。“mina是一个socket的网络框架,但是它提供了便利的proto支持,通过它的eoder和decoder,你将你的应用可以便利的扩展并支持各种基于socket的网络协议,比如http服务器、ftp服务器(固然,这很复杂)、teet服务器等等。基于mina用户可以简单地开发高性能和高伸缩性的网络应用程序。”下面是对官方入门文档的中文译版,因为彻

2、低参照官方文档在程序详细运行时碰到一些import不足的状况,在示例源码的import是我在亲手实践后修改过的,其他的地方都和原文一样。apache mina 迅速入门1简介建立一个基于mina的时光服务器,下面的内容需要先预备好。1,mina 1.1 core2,jdk 1.5 or greater 3,slf4j 1.3.0 or greater : log4j 1.2 users: slf4j-api.jar, slf4j-log4j12.jar, and log4j 1.2.x log4j 1.3 users: slf4j-api.jar, slf4j-log4j13.jar, and

3、 log4j 1.3.x java.util.logging users: slf4j-api.jar and slf4j-jdk14.jar 注重:首先请确认你用法了正确的slf4j-*.jar 。比如说slf4j-log4j12.jar 和log4j-1.3.x.jar 是不能在一起用法的,将会浮现功能障碍。 (我用了1.2系列,那么全部的软件包就是: log4j-1.2.14.jar; mina-core-1.1.2.jar; slf4j-api-1.2.jar; slf4j-jdk14-1.2.jar; slf4j-log4j12-1.2.jar)这个程序只测试了windows2000

4、pro 和 linux系统,并且在做的时候没有依靠于一些开发平台的环境。2编写mina时光服务下面先建立一个文件minatimeserver.java,代码如下:public class minatimeserver public ic vo main(sing args) / code will go here nt 下面会渐渐将这个类写完,这里先定义一个main用于启动程序。这一步结束后,还需要一个监听衔接的对象,由于这个程序是基于tcp/ip的,这里将增强一个socketacceptor。 import mon.ioacceptor; import org.apache.mina.tra

5、nsport.socket.nio.socketacceptor; public class minatimeserver public static void main(string args) / the following two lines change the default buffer type to 'heap', / yields better perfoance. bytebuffer.usedirectbuffers(fae); bytebuffer.setalloor(new simplebytebufferallocator(); ioacceptor

6、 acceptor = new socketacceptor(); 通过这里的socketacceptor类,下面将把它绑定到一个端口上,假如你想增强一个线程模型到该类的话,参考"配置线程模型"部分。 现在我们为socketacceptor添加设置。它允许我们为socekt配置明确套接字用于允许来自客户端的衔接。import java.io.ioexception; import .inetsocketaress; import mon.ioacceptor; import org.apache.mina.transport.socket.nio.socketaccepto

7、r; public class minatimeserver private static final int port = 9123; public static void main(string args) throws ioexception bytebuffer.setusedirectbuffers(false); bytebuffer.setallocator(new simplebytebufferallocator(); ioacceptor acceptor = new socketacceptor(); socketacceptorconfig cfg = new sock

8、etacceptorconfig(); cfg.getsessionconfig().setreuseaddress( true ); cfg.getfilterchain().addlast( "logger", new loggingfilter() ); cfg.getfilterchain().addlast( "codec", new protocolcodecfilter( new textlinecodecfactory( charset.forname( "utf-8" ); socketacceptorconfig类

9、的实例用于当我们每次预备启动acceptor的时候进入这个acceptor。 首先,我们设置一个重用地址标识。从 jdk documentation可以了解更多关于这里的学问。 然后我们在配置中添加一个过滤器。这个过滤器filter将记录全部信息,例如最近创建的sessions,收到的消息,发送的消息,session关闭。 下一个过滤器是一个protocolcodecfilter。这个过滤器可以将二进制数据或编码协议数据转换成消息对象和代替法。 下面的部分来为acceptor绑定端口。这个办法标记着服务器进程的启动,假如这个办法没有被调用,服务器将不会与客户端举行衔接。 import java

10、.io.ioexception; import .inetsocketaddress; import java.nio.charset.charset; import mon.bytebuffer; import mon.ioacceptor; import mon.simplebytebufferallocator; import org.apache.mina.transport.socket.nio.socketacceptor; import org.apache.mina.filter.loggingfilter; import org.apache.mina.filter.code

11、c.protocolcodecfilter; import org.apache.mina.filter.codec.textline.textlinecodecfactory; import org.apache.mina.transport.socket.nio.socketacceptorconfig; public class minatimeserver private static final int port = 9123; public static void main(string args) throws ioexception bytebuffer.setusedirec

12、tbuffers(false); bytebuffer.setallocator(new simplebytebufferallocator(); ioacceptor acceptor = new socketacceptor(); socketacceptorconfig cfg = new socketacceptorconfig(); cfg.getfilterchain().addlast( "logger", new loggingfilter() ); cfg.getfilterchain().addlast( "codec", new p

13、rotocolcodecfilter( new textlinecodecfactory( charset.forname( "utf-8" ); acceptor.bind( new inetsocketaddress(port), new timeserverhandler(), cfg); system.out.println("mina time server start."); 这里定义了一个整型的端口变量,呼叫socketacceptor.bind(socketaddress,iohandler,cfg),第一个参数是要监听的网址,是本地的9

14、123端口。其次个参数传的是实现iohandler接口的类,是服务于全部的客户端哀求的。在这里,将会扩展iohandleradapter类,这类遵循"适配器设计模式"的。第三个参数是配置对象,用于配置日志和编码过滤器。每一个信息都会通过在ioacceptor中定义的过滤器链的全部过滤器。在这风景点,将会将信息通过日志和编码过滤器。日志过滤器用sl4j库记录信息,而编码过滤器则反编码全部收到的信息,并且将全部textlinecodecfactory发送的信息举行编码。下面就是timeserverhandler类的代码: import java.util.date; impor

15、t mon.iohandleradapter; import mon.iosession; public class timeserverhandler extends iohandleradapter public void exceptioncaught(iosession session, throwable t) throws exception t.printstacktrace(); session.close(); public void messagereceived(iosession session, object msg) throws exception string

16、str = msg.tostring(); if( str.trim().equalsignorecase("quit") ) session.close(); return; date = new date(); session.( date.tostring() ); system.out.println("message written."); public void sessioncreated(iosession session) throws exception system.out.println("session created

17、."); if( session.gettransporttype() = transporttype.socket ) (socketsessionconfig) session.getconfig() ).setreceivebuffersize( 2048 ); session.setidletime( idlestatus.both_idle, 10 ); 这里用于管理信息,笼罩了exceptioncaught,messagereceived 和 sessioncreated 办法,如前所示,该类扩展了iohandleradapter。exceptioncaught 办法将会

18、打印错误并且关闭对话,对于大多数的状况来讲,这是标准的处理办法,除非能从异样中复原过来。messagereceived 办法将收到从客户端发来的数据,并且写回当前时光。假如收到了"quit",对话将被关闭。该办法将当前时光发往客户端,依靠于你用法的协议编码,发送至办法的对象(其次个参数)会有不同,发送到session.write(object)办法的对象类同。假如你没有指定协议编码,则普通会收到bytebuffer对象,而发送的也要是bytebuffer对象。sessioncreated 办法用于对话初始化,在这里,先打印一条信息,然后推断对话的类型,再设置缓冲大小,这里设置的是2048个字节。空闲时光设置为10秒,假如笼罩了sessionidle办法,则该办法每10秒被呼叫一次。3测试到这里,编译程序。假如胜利,那么启动程序,登陆拜访程序,如下所示:客户端内容:usermyhost: telnet 9123 trying . connected to . escape character is ''. hello mon apr 09 23:42:55 edt 2007 quit c

温馨提示

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

评论

0/150

提交评论