- 浏览: 799829 次
- 性别:
- 来自: 西安
文章分类
- 全部博客 (307)
- struts (8)
- hibernate (3)
- spring (32)
- opensourceproject (12)
- javaScript (9)
- primeton EOS (2)
- journey of heart (10)
- Design pattern (6)
- ejb (17)
- point (37)
- Linux&Unix (22)
- ibatis (10)
- AJAX (6)
- DB (26)
- Protocol (6)
- chart (4)
- web server (11)
- webservice (7)
- integration (3)
- tuxedo (5)
- ext (4)
- android (1)
- c/c++ (12)
- JVM (1)
- paginationFrame (2)
- code (2)
- report (1)
- High-performance web (1)
- svn (1)
- JQuery (1)
- workDaily (2)
- cloud (16)
- Python (8)
- English (2)
- shell (5)
- googleCode (1)
- nio (1)
- hyper-v (1)
- debug (3)
- vbs (2)
- openstack (3)
- K8S (1)
- Mesos (0)
- Spark (0)
- Marathon (0)
最新评论
-
钱图大展:
chao2751021 写道lib包哪里去下载,找不到
大型网站用户行为记录的一个实现--基于clickStream(第一部分) -
钱图大展:
无法下载
大型网站用户行为记录的一个实现--基于clickStream(第一部分) -
fm395728572:
shell脚本中用到了环境变量,但是获取不到,例如脚本中有一句 ...
ganymed-ssh2 for Java -
liuhanjiang:
我qq147229234
大型网站用户行为记录的一个实现--基于clickStream(第一部分) -
liuhanjiang:
博主 我利用您提供的方法实现博文中介绍的clickstream ...
大型网站用户行为记录的一个实现--基于clickStream(第一部分)
Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina 提供了事件驱动、异步(Mina 的异步IO 默认使用的是JAVA NIO 作为底层支持)操作的编程模型。Mina 主要有1.x 和2.x 两个分支,这里我们讲解最新版本2.0,如果你使用的是Mina 1.x,那么可能会有一些功能并不适用。学习本文档,需要你已掌握JAVA IO、JAVA NIO、JAVASocket、JAVA 线程及并发库(java.util.concurrent.*)的知识。Mina 同时提供了网络通信的Server 端、Client 端的封装,无论是哪端,Mina 在整个网通通信结构中都处于如下的位置:
可见Mina 的API 将真正的网络通信与我们的应用程序隔离开来,你只需要关心你要发送、接收的数据以及你的业务逻辑即可。同样的,无论是哪端,Mina 的执行流程如下所示:
(1.) IoService:这个接口在一个线程上负责套接字的建立,拥有自己的Selector,监听是否有连接被建立。
(2.) IoProcessor:这个接口在另一个线程上负责检查是否有数据在通道上读写,也就是说它也拥有自己的Selector,这是与我们使用JAVA NIO 编码时的一个不同之处,通常在JAVA NIO 编码中,我们都是使用一个Selector,也就是不区分IoService与IoProcessor 两个功能接口。另外,IoProcessor 负责调用注册在IoService 上的过滤器,并在过滤器链之后调用IoHandler。
(3.) IoFilter:这个接口定义一组拦截器,这些拦截器可以包括日志输出、黑名单过滤、数据的编码(write 方向)与解码(read 方向)等功能,其中数据的encode 与decode是最为重要的、也是你在使用Mina 时最主要关注的地方。
(4.) IoHandler:这个接口负责编写业务逻辑,也就是接收、发送数据的地方。
Mina自带的过滤器(部分)
下面我们写一个 例子 :1个mina 的客户端和服务器端,完成双方的通讯,并且服务器端是使用了 mina的 BlacklistFilter 黑名单过滤器,用来防止非法的客户端的访问
服务器端:MinaTimeServer.java
package cn.com.xinli.mina; import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; import java.nio.charset.Charset; import java.util.Date; import org.apache.mina.core.service.IoAcceptor; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IdleStatus; 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.firewall.BlacklistFilter; import org.apache.mina.filter.logging.LoggingFilter; import org.apache.mina.transport.socket.nio.NioSocketAcceptor; public class MinaTimeServer { public static final int PORT = 9123; public static void main(String[] args)throws IOException { IoAcceptor acceptor = new NioSocketAcceptor(); BlacklistFilter blacklistFilter=new BlacklistFilter(); InetAddress[] address= new InetAddress[1]; address[0]=InetAddress.getByName("169.254.11.186"); blacklistFilter.setBlacklist(address); acceptor.getFilterChain().addFirst("black",blacklistFilter); acceptor.getFilterChain().addLast("logger", new LoggingFilter()); acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("GBK")))); acceptor.setHandler(new TimeServerHandler()); acceptor.getSessionConfig().setReadBufferSize(2048); acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10); acceptor.bind(new InetSocketAddress(PORT)); System.out.println("MINA Time Server started,bind port:"+PORT); } } 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(); System.out.println("str:"+str); if(str.trim().equalsIgnoreCase("quit")) { session.close(true); return; } Date date = new Date(); session.write(date.toString()); System.out.println("Message written..."); session.close(true); } @Override public void sessionIdle(IoSession session,IdleStatus status)throws Exception { System.out.println("IDLE " + session.getIdleCount(status)); } @Override public void messageSent(IoSession session, Object message) throws Exception { // TODO Auto-generated method stub super.messageSent(session, message); } }
客户端:MinaTimeClinet.java
package cn.com.xinli.mina; import java.net.InetSocketAddress; import java.nio.charset.Charset; import org.apache.mina.core.service.IoConnector; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.textline.LineDelimiter; import org.apache.mina.filter.codec.textline.TextLineCodecFactory; import org.apache.mina.filter.firewall.BlacklistFilter; import org.apache.mina.transport.socket.nio.NioSocketConnector; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MinaTimeClinet { public static void main(String[] args) { IoConnector connector=new NioSocketConnector(); connector.setConnectTimeoutMillis(30000); connector.getFilterChain().addLast("codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName("GBK") // LineDelimiter.WINDOWS.getValue(), // LineDelimiter.WINDOWS.getValue() ) ) ); connector.setHandler(new ClientHandler("你好!\r\n 大家好!")); connector.connect(new InetSocketAddress("localhost", 9123)); connector.dispose(); } } class ClientHandler extends IoHandlerAdapter { private final String values; public ClientHandler(String values) { this.values = values; } @Override public void sessionOpened(IoSession session) { session.write(values); //session.close(true); //return; } }
运行结果:
MINA Time Server started,bind port:9123
0 [NioProcessor-1] INFO org.apache.mina.filter.logging.LoggingFilter(158) - CREATED
0 [NioProcessor-1] INFO org.apache.mina.filter.logging.LoggingFilter(158) - OPENED
63 [NioProcessor-1] INFO org.apache.mina.filter.logging.LoggingFilter(140) - RECEIVED: HeapBuffer[pos=0 lim=18 cap=2048: C4 E3 BA C3 A3 A1 0D 0A 20 B4 F3 BC D2 BA C3 A3...]
str:你好!
Message written...
str: 大家好!
Message written...
94 [NioProcessor-1] INFO org.apache.mina.filter.logging.LoggingFilter(140) - SENT: HeapBuffer[pos=0 lim=29 cap=32: 53 75 6E 20 4A 61 6E 20 31 30 20 31 33 3A 33 37...]
94 [NioProcessor-1] INFO org.apache.mina.filter.logging.LoggingFilter(140) - SENT: HeapBuffer[pos=0 lim=0 cap=0: empty]
125 [NioProcessor-1] INFO org.apache.mina.filter.logging.LoggingFilter(158) - CLOSED
如果客户端使用的黑名单中的IP,则服务器端 拒绝连接:
MINA Time Server started,bind port:9123
0 [NioProcessor-1] WARN org.apache.mina.filter.firewall.BlacklistFilter(230) - Remote address in the blacklist; closing.
0 [NioProcessor-1] WARN org.apache.mina.filter.firewall.BlacklistFilter(230) - Remote address in the blacklist; closing.
0 [NioProcessor-1] WARN org.apache.mina.filter.firewall.BlacklistFilter(230) - Remote address in the blacklist; closing.
附件中是整个工程,放在eclipse可以直接运行
- minaTest.rar (922.8 KB)
- 下载次数: 199
发表评论
-
JSP run
2012-03-02 21:12 1597经验教训: 1.cn.jsprun.filter.Wap ... -
JNA—JNI终结者(转载)
2011-06-22 06:42 1527介绍 给大家介绍一个最新的访问本机代码的 ... -
Eclipse
2011-04-12 08:25 1145如何导入Eclipse自定义的快捷键设置 http:/ ... -
Jgroup
2011-02-24 13:04 5860参考资料: 1. 单播 ... -
Castor学习笔记 (转载)
2011-02-17 19:31 14631. Castor是什么 Castor是一种将Jav ... -
玩了一下 ssl-explorer vpn(未完待续)
2011-01-09 23:53 7383SSL-Explorer是一个SSL VP ... -
大型网站用户行为记录的一个实现--基于clickStream(第二部分)
2010-02-09 11:25 4632在上一节,我们已经可以使用clickstream ... -
大型网站用户行为记录的一个实现--基于clickStream(第一部分)
2010-02-07 17:54 16556大型互联网应用记录 ... -
使用 AppFuse 快速构建 J2EE 应用
2009-12-24 22:09 1903http://www.ibm.com/developer ... -
DWR2.0 HelloWorld
2008-09-30 08:20 1719好早以前就使 ... -
WebService IP 地址查询详细步骤
2008-08-28 22:19 11623还是老套路上http://fhs.6617.com/getip ...
相关推荐
Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)
帮助你快速学习Mina框架,Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于 TCP/IP、UDP/IP协议栈的通信框架。Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用。
Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高...
mina推送mina推送mina推送mina推送mina推送mina推送mina推送mina推送
Apache_Mina_Server_2.0中文参考手册,Apache_Mina_Server_2.0中文参考手册,Apache_Mina_Server_2.0中文参考手册
Apache_Mina_Server_2.0中文参考手册V1.0.pdf .
Apache_Mina_Server_2.0中文参考手册
Apache Mina Server 2.0 中文参考手册 Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP 协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等), ...
Apache_Mina_Server_2.0中文参考手册V1.0 中文Mina实用帮助手册
Apache_Mina_Server_2.0中文参考手册V1.0.pdf
Apache_Mina_Server_2.0中文参考手册V1.0
Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于 TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供 JAVA 对象的序列化服务、虚拟机管道通信服务等), Mina 可以帮助我们快速开发高性能、高...
自己整理的一些mina学习资料,内含MINA官方教程(中文版).docx,MINA-2.0.0-M4.chm(英文版),Apache_Mina_Server_2.0中文参考手册V1.0.pdf, 还有mina的包
好不容易才找到的,不要积分希望对大家有帮助---Apache_Mina_Server_2.0中文参考手册.pdf