- 浏览: 457089 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (233)
- 技术日志 (87)
- portal (7)
- jBPM/Activiti (34)
- Roller学习 (18)
- Java基础、网站开发 (19)
- 收藏URL (4)
- UML (3)
- linux操作 (7)
- 工作环境准备 (8)
- Mina (15)
- tomcat (8)
- Mylyn (3)
- sina网站 (2)
- 规则引擎 (3)
- 工作记录 (11)
- html(5) (9)
- 手机开发 (3)
- oracle (26)
- 常用的 (2)
- maven (8)
- hadoop (0)
- xml (7)
- 错误解决 (5)
- linux (1)
- c# (2)
- c++ (1)
- node.js (1)
- 银行业务知识 (1)
- Java调试 (0)
最新评论
-
tomcatmeng:
请问候选用户是怎样task自己的任务,看网上说先根据任务id先 ...
jBPM4.4:ForEach的使用--动态设置参与人数 -
maoweiwer:
友情提醒:如果是在MYSQL下创建数据库,则还需要更改\jbp ...
jBPM4.4: 创建数据库表 -
zybing:
ganjiang 写道有点疑惑,请lz指点,1.那个“depl ...
jBPM4.4:如何图示化显示当前的流程执行到了哪一步骤 -
zybing:
ganjiang 写道有点疑惑,请lz指点,1.那个“depl ...
jBPM4.4:如何图示化显示当前的流程执行到了哪一步骤 -
ganjiang:
有点疑惑,请lz指点,1.那个“deployId”不知是那个i ...
jBPM4.4:如何图示化显示当前的流程执行到了哪一步骤
来源:http://mina.apache.org/quick-start-guide.html
这篇介绍带领你浏览基于MINA程序的处理流程。这篇介绍介绍一个时间服务器。在开始前有一些准备工作:
- MINA1.1核心
- JDK1.5或更高
-
SLF4J1
.3.0或更高
- Log4j 1.2 使用者: slf4j-api.jar, slf4j-log4j12.jar, and Log4J 1.2.x
- Log4j 1.3 使用者: slf4j-api.jar, slf4j-log4j13.jar, and Log4J 1.3.x
- java.util.logging 使用者:slf4j-api.jar and slf4j-jdk14.jar
- 重要:一定要使用正确的slf4j-*.jar和你使用的log框架版本合适
如:slf4j-log4j12.jar and log4j-1.3.x.jar 不能再一起使用,否则会失效
我已经测试过这个程序,在Windows2000 professional,和Linux上。如果你有任何问题,请联系我们,这样可以和MINA开发者进行联系。同时,这篇介绍努力和开发平台(IDE、编辑者等)无关。这篇介绍工作环境将使你刚到舒服。为了简洁,Compilation commands and steps to execute the program 被去除了。如果你需要知道如何Compilation commands and steps to execute the program ,参考 Java tutorial
。
编写MINA时间服务器
我们将从 MinaTimeServer.java开始。
public class MinaTimeServer { public static void main(String[] args) { // code will go here next } }
这段代码对任何人都不复杂。我们简单定义了一个main函数,程序的开始。在这一点上,我们将开始增加代码,来搭建我们的服务器。
首先,我们需要一个对象,来监听所有的链接。这个程序是TCP/IP,我们增加一个SockAcceptor
import org.apache.mina.common.ByteBuffer; import org.apache.mina.common.IoAcceptor; import org.apache.mina.common.SimpleByteBufferAllocator; import org.apache.mina.transport.socket.nio.SocketAcceptor; public class MinaTimeServer { public static void main(String[] args) { // The following two lines change the default buffer type to 'heap', // which yields better performance.c ByteBuffer.setUseDirectBuffers(false); ByteBuffer.setAllocator(new SimpleByteBufferAllocator()); IoAcceptor acceptor = new SocketAcceptor(); } }
这里的SocketAcceptor,我们能够继续顶一个处理类(handler class),绑定SocketAcceptor到一个端口。如果你对在SocketAcceptor上增加线程模型感兴趣,请阅读Configuring Thread Model
我们将要增加SocketAcceptor配置。这允许我们定义socket设置,使用到所有的链接上。
import java.io.IOException; import java.nio.charset.Charset; import org.apache.mina.common.ByteBuffer; import org.apache.mina.common.IoAcceptor; import org.apache.mina.common.SimpleByteBufferAllocator; import org.apache.mina.filter.LoggingFilter; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.textline.TextLineCodecFactory; import org.apache.mina.transport.socket.nio.SocketAcceptor; 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.setUseDirectBuffers(false); ByteBuffer.setAllocator(new SimpleByteBufferAllocator()); IoAcceptor acceptor = new SocketAcceptor(); SocketAcceptorConfig cfg = new SocketAcceptorConfig(); cfg.getFilterChain().addLast( "logger", new LoggingFilter() ); cfg.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" )))); } }
这里创建了一个SocketAcceptorConfig实例,一旦我们准备好开始启动acceptor,将传给acceptor 。
首先我们重新设置address flag。更多信息见JDK Documentation
其次我们增加一个filter给configuration。这个filter将记录所有信息,如新建一个session,收到信息,传输信息,session关闭。下一个filter是ProtocolCodecFilter。这个filter将解析2进制或者和协议相关的数据转换成对象,或者反过来。
最后绑定acceptor到端口。这个方法意味着启动服务器流程。不调用这个方法,服务器不会给客户连接进行服务
import java.io.IOException; import java.net.InetSocketAddress; import java.nio.charset.Charset; import org.apache.mina.common.ByteBuffer; import org.apache.mina.common.IoAcceptor; import org.apache.mina.common.SimpleByteBufferAllocator; import org.apache.mina.filter.LoggingFilter; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.textline.TextLineCodecFactory; import org.apache.mina.transport.socket.nio.SocketAcceptor; 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.setUseDirectBuffers(false); ByteBuffer.setAllocator(new SimpleByteBufferAllocator()); IoAcceptor acceptor = new SocketAcceptor(); SocketAcceptorConfig cfg = new SocketAcceptorConfig(); cfg.getFilterChain().addLast( "logger", new LoggingFilter() ); cfg.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" )))); acceptor.bind( new InetSocketAddress(PORT), new TimeServerHandler(), cfg); System.out.println("MINA Time server started."); } }
定义了一个端口变量,类型为整形的,对SocketAcceptor.bind(SocketAddress, IoHandler)调用 。
第一个参数是SocketAddress,定义了网络地址,需要侦听的。
第二个参数传递的绑定方法是一个类,必须实现IoHandler接口。对已大多数使用MINA的程序,这个成为编程的主要工作(the workhorse of the program),服务于所有的客户端。对于这个介绍,我们将扩张这个IoHandlerAdapter。这个类采用adapter design pattern , 来简化需要实现的IoHandler接口的代码编写。
第三个参数是configuration对象。已经配置了一个logger过滤器,编码过滤器。 MINA将每个接收到的消息都经过一些或者全部的过滤器链,在IoAcceptor中定义。这种情况下,我们将传递消息通过logging过滤器,和编码过滤器。这个logging filter将简单的采用SL4J库赖记录log,并且codec过滤器将解码每一个收到的消息,并且采用TextLineCodecFactory对每一个消息进行编码。
import java.util.Date; import org.apache.mina.common.IdleStatus; import org.apache.mina.common.IoHandlerAdapter; import org.apache.mina.common.IoSession; import org.apache.mina.common.TransportType; import org.apache.mina.transport.socket.nio.SocketSessionConfig; 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 str = msg.toString(); if( str.trim().equalsIgnoreCase("quit") ) { 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..."); if( session.getTransportType() == TransportType.SOCKET ) ((SocketSessionConfig) session.getConfig() ).setReceiveBufferSize( 2048 ); session.setIdleTime( IdleStatus.BOTH_IDLE, 10 ); } }
这里我们有了介绍程序的处理部分代码。我们重写方法:exceptionCaught、messageReceived和sessionCreated。在启动之前,这个类集成了IoHandlerAdapter,实现了Adapter design pattern
exceptionCaught:打印错误到strace trace, 关闭连接。对大多数程序,这是一个标准的做法,除非这个handler能够在错误状态中恢复。
messageReceived:从客户端接收到的数据,会写当前的时间给客户端。如果从客户端接收到的是quit单词,session将会被关闭。这个方法也会打印当前时间给客户端。依赖于你使用的编码,传入的对象(第二个参数)也将不同,如(Depending on the protocol codec that you use, the object (second parameter) that gets passed in to this method will be different, as well as the object that you pass in to the session.write(Object) method. )
如果你没有定义协议编码,你将接收到ByteBuffer对象,且要求协会ByteBuffer对象
SessionCreated:session初始化发生的时候。这种情况下,我们打印出方法进入,测试这个链接的传输协议是基于socket的(采用UDP),设置接受buffer大小。上述例子中,传入的bugger尺寸设置成2048字节。空闲时间设置成10秒。如果我们重写sessionidle方法,sessionidle方法将10秒被调用一次。
Try out the Time server
At this point, we can go ahead and compile the program. Once you have compiled the program you can run the program in order to test out what happens. The easiest way to test the program is to start the program, and then telnet in to the program:
user@myhost:~> telnet 127.0.0.1 9123
Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. hello Mon Apr 09 23:42:55 EDT 2007 quit Connection closed by foreign host. user@myhost:~> |
MINA Time server started.
Session created... Message written... |
Using MINA in restricted Java environnements
DIRMINA-659 issue rised the necessity of adding a special permission when running MINA framework in a restricted environnement like applets or Java Webstart technology. This happens when shutting down the thread pools (ExecutorService ).
In order to get it to work properly, you will need to set the following permission :
permission java.lang.RuntimePermission "modifyThread";
Or you can also choose to sign your code.
What's Next?
Please visit our Documentation page to find out more resources. You can also keep reading other tutorials .
发表评论
-
【Mina】Executor Filter
2011-08-25 16:37 1523Executor Filter是和thread model 相 ... -
【Mina】Codec Filter
2011-08-25 15:36 1476目前的几种协议制定方法: There are t ... -
【Mina】IoBuffer
2011-08-25 15:00 1900Mina中采用Iobuffer,而不是 ... -
【Mina】IoHandler
2011-08-25 14:35 1264IoHandler有以下方法: sessionCrea ... -
【Mina】Filter -- Filterchain中要注意的对象类型问题
2011-08-25 14:25 1118在Filter的method中,函数要向下传递的都是一个Obj ... -
【Mina】Filter -- 函数执行次序
2011-08-25 14:08 1550在Filter中,函数提供了一大堆,各自在什么时候发起作用呢? ... -
【Mina】Filter -- 简单使用
2011-08-25 11:41 1300Filter在mina中很重要,譬如前面服务器端程序中,就要设 ... -
【Mina】Filter --- 2: IoFilter中的函数
2011-08-25 11:32 1450Filter: 接口IoFilter init: Fi ... -
【Mina】Filter--1
2011-08-25 11:06 1294filter: 在IoService和IoHandler之间进 ... -
【Mina】Session
2011-08-25 09:56 1428client和server的连接: 叫session ... -
【Mina】Mina Service
2011-08-25 09:43 1417Mina Service:IoService 在 s ... -
【Mina】Mina框架的例子--时间服务器
2011-08-24 14:27 1874Mina的第一个例子,就是时间服务器: 服务器接收客户 ... -
【Mina】Mina服务器端结构
2011-08-24 13:28 1438A Bird's Eye View Lets tak ... -
Mina Features
2010-05-20 05:39 1351MINA是一个简单、但功能丰富的网络程序框架。 提供: ...
相关推荐
基于springboot大学生就业信息管理系统源码数据库文档.zip
基于java的驾校收支管理可视化平台的开题报告
时间序列 原木 间隔5秒钟 20241120
毕业设计&课设_基于 Vue 的电影在线预订与管理系统:后台 Java(SSM)代码,为毕业设计项目.zip
基于springboot课件通中小学教学课件共享平台源码数据库文档.zip
基于java的网上购物商城的开题报告
Delphi人脸检测与识别Demo1fdef-main.zip
基于java的咖啡在线销售系统的开题报告
基于java的自助医疗服务系统的开题报告.docx
内容概要:本文档全面介绍了Visual Basic(VB)编程语言的基础知识和高级应用。首先概述了VB的基本特性和开发环境,随后详细讲述了VB的数据类型、变量、运算符、控制结构、数组、过程与函数、变量作用域等内容。接着介绍了窗体设计、控件使用、菜单与工具栏的设计,文件操作、数据库访问等关键知识点。最后讨论了VB的学习方法、发展历史及其在桌面应用、Web应用、数据库应用、游戏开发和自动化脚本编写等领域的广泛应用前景。 适合人群:初学者和中级程序员,尤其是希望快速掌握Windows桌面应用开发的人群。 使用场景及目标:①掌握VB的基础语法和开发环境;②学会使用VB创建复杂的用户界面和功能完整的应用程序;③理解数据库操作、文件管理和网络编程等高级主题。 其他说明:Visual Basic是一种简单易学且功能强大的编程语言,尤其适合用于开发Windows桌面应用。文中不仅覆盖了基础知识,还包括了大量的实用案例和技术细节,帮助读者快速提升编程技能。
基于java的疫情期间高校防控系统开题报告.docx
基于springboot+vue社区老年人帮扶系统源码数据库文档.zip
基于java的超市商品管理系统的开题报告.docx
基于SpringBoot房屋买卖平台源码数据库文档.zip
xdu限通院23微处理器系统与应用大作业(两只老虎),适应于汇编语言keil软件,
<项目介绍> - 新闻类网站系统,基于SSM(Spring、Spring MVC、MyBatis)+MySQL开发,高分成品毕业设计,附带往届论文 - 不懂运行,下载完可以私聊问,可远程教学 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
基于java的学生网上请假系统的开题报告.docx
社会经济繁荣发展的今天,电子商务得到了飞速发展,网上交易越来越彰显出其独特的优越性,在人们的日常生活中,出现了各种类型的交易网站。其中一个就是车辆易主交易网站,它是一个服务于用户买卖二手车辆的交易网站,为用户提供了平等互利、方便快捷的网上交易平台,通过这一类型的网站,用户可自由出售和购买车辆。 本课题主要根据车辆本身的特性,充分发挥互联网的特点与优势,构建一个以二手车辆为商品、基于互联网平台的车辆易主业务交易管理系统,并根据车辆易主业务交易管理系统的应用需求,进行需求分析,进而对网站系统作规划设计。采用IDEA为运行平台,以SSH为框架,运用HTML语言、JSP技术、MySql数据库、JSP与后台数据库链接等关键技术建设二手车网上交易系统,构建车辆易主交易系统的会员注册与登录,网站首页展示、用户发布商品车辆,用户求购商品车辆,分页浏览、购物系统、用户后台管理、管理员用户后台管理等功能,并使这些功能得以实现并更好为用户服务。网站整体构建完成且测试成功后,用户可以进入网站进行注册、登录,登录后,用户可以在网站上发布自己的闲置车辆或者寻找想要购买的车辆,还可以收藏车辆,管理发布和收藏的车辆,
SQLite3的向量扩展库,windows dll,版本0.1.5
基于C++实现(控制台)商品库存管理系统