- 浏览: 121578 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
萨琳娜啊:
Java读源码之Netty深入剖析网盘地址:https://p ...
Netty 源码阅读学习 -
小灯笼:
Netty源码剖析视频教程网盘地址:https://pan.b ...
Netty 源码阅读学习 -
白天看黑夜:
Apache Mina Server 2.0 中文参考手册(带 ...
Apache MINA (2) Hello World! -
smart152829:
很不错的文章,最近看了看了夜行侠老师讲的Netty深入浅出源码 ...
Netty 源码阅读学习 -
liaohb:
为之疯狂的颜值,陶醉天年。
nio Selector 阻塞 唤醒 原理
了解完Apach MINA的一些基本概念Apache MINA (1) 简介 ,开始进入MINA相关的代码学习,以一个简单HelloWorld程序开始,完成客户端与服务端之间的通讯。
准备工作:
org.apache.mina 版本4.0
org.slf4j 1.6.1 (Simple Logging Facade for Java)mina所使用的日志框架,该版本是与mina4.0匹配的版本。
我是用maven管理项目依赖的,使用apache-maven-3.0.4
IDE:IntelliJ IDEA 10.0.3
开始HelloWorld:
1.maven的pom文件:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>example</groupId> <artifactId>example</artifactId> <version>1.0</version> <properties> <project.build.sourceEncoding>GBK</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.apache.mina</groupId> <artifactId>mina-core</artifactId> <version>2.0.4</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>1.6.1</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-nop</artifactId> <version>1.6.1</version> </dependency> </dependencies> </project>
2. 服务器代码:
a) 首先实现服务端的IoHandler代码SimpleMinaServerHandler。主要功能是打印客户端写入的信息,统计客户端的请求次数以及返回当前客户端是第几次访问。
package com.chiyan.apach.mina.server; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession; import java.util.concurrent.atomic.AtomicInteger; /** * Created by IntelliJ IDEA. * 简单的消息处理器 * User: chiyan * Date: 12-7-19 * Time: 上午12:19 */ public class SimpleMinaServerHandler extends IoHandlerAdapter { private AtomicInteger count = new AtomicInteger(0); /** * 当一个客户端连接进入时 */ @Override public void sessionOpened(IoSession session) throws Exception { System.out.println("client connection : " + session.getRemoteAddress()); } /** * 当一个客户端关闭时 */ @Override public void sessionClosed(IoSession session) throws Exception { System.out.println("client disconnection : " +session.getRemoteAddress() + " is Disconnection"); } /** * 当接收到客户端的信息 * * @param session * @param message * @throws Exception */ @Override public void messageReceived(IoSession session, Object message) throws Exception { String str = (String)message; // 打印客户端 System.out.println("receive client message : [ " + str +" ]"); // 回写消息给客户端 session.write(count.incrementAndGet()); } }
b) 搭建服务端 MainServer:
package com.chiyan.apach.mina.server; import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder; 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.transport.socket.SocketAcceptor; import org.apache.mina.transport.socket.SocketSessionConfig; import org.apache.mina.transport.socket.nio.NioSocketAcceptor; import java.io.IOException; import java.net.InetSocketAddress; /** * Created by IntelliJ IDEA. * User: chiyan * Date: 12-7-19 * Time: 上午12:27 */ public class MainServer { // 服务器端口 private static final int SERVER_PORT = 8899; public static void main(String[] args) throws Exception { //创建一个非阻塞的Server端Socket,用NIO SocketAcceptor acceptor = new NioSocketAcceptor(); // 定义每次接收数据大小 SocketSessionConfig sessionConfig = acceptor.getSessionConfig(); sessionConfig.setReadBufferSize(2048); //创建接受数据的过滤器 DefaultIoFilterChainBuilder chain = acceptor.getFilterChain(); //设定这个过滤器将一行一行(/r/n)的读取数据 chain.addLast("myChain", new ProtocolCodecFilter(new TextLineCodecFactory())); //设定服务器端的消息处理器: 一个 SimpleMinaServerHandler 对象 acceptor.setHandler(new SimpleMinaServerHandler()); //绑定端口,启动服务器 try { acceptor.bind(new InetSocketAddress(SERVER_PORT)); } catch (IOException e) { e.printStackTrace(); } System.out.println("Mina server is listing port:" + SERVER_PORT); } }
3. 客户端代码
a)首先实现客户端的IoHandler代码SimpleMinaClientHandler。主要功能是向服务端写消息,接收到服务端计数后再回写服务端。
package com.chiyan.apach.mina.client; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IdleStatus; import org.apache.mina.core.session.IoSession; /** * Created by IntelliJ IDEA. * User: chiyan * Date: 12-7-19 * Time: 上午12:31 */ public class SimpleMinaClientHandler extends IoHandlerAdapter { /** * 当客户端接受到消息时 */ @Override public void messageReceived(IoSession session, Object message) throws Exception { Integer num = Integer.valueOf((String)message); if(num == null || num >10){ session.close(true); return; } System.out.println("receive server num : [ " + num + " ]"); Thread.sleep(1000); session.write("client received num is : " + num + ", request next num"); } /** * 当一个客户端被关闭时 */ @Override public void sessionClosed(IoSession session) throws Exception { System.out.println("client disconnect"); } /** * 当一个客户端连接进入时 */ @Override public void sessionOpened(IoSession session) throws Exception { System.out.println("create connection to server :" + session.getRemoteAddress()); session.write("client started"); session.write("Hello World!"); } }
b)搭建客户端MainClient
package com.chiyan.apach.mina.client; import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder; import org.apache.mina.core.future.ConnectFuture; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.textline.TextLineCodecFactory; import org.apache.mina.transport.socket.nio.NioSocketConnector; import java.net.InetSocketAddress; /** * Created by IntelliJ IDEA. * User: chiyan * Date: 12-7-19 * Time: 上午12:40 */ public class MainClient { /** * 服务器ip */ private static final String SERVER_IP="127.0.0.1"; /** * 服务器端口 */ private static final int SERVER_PORT=8899; public static void main(String []args){ //Create TCP/IP connection NioSocketConnector connector = new NioSocketConnector(); //创建接受数据的过滤器 DefaultIoFilterChainBuilder chain = connector.getFilterChain(); //设定这个过滤器将一行一行(/r/n)的读取数据 chain.addLast("myChain", new ProtocolCodecFilter(new TextLineCodecFactory())); //服务器的消息处理器:一个 SimpleMinaClientHandler 对象 connector.setHandler(new SimpleMinaClientHandler()); //set connect timeout connector.setConnectTimeoutMillis(30 * 1000); //连接到服务器: ConnectFuture cf = connector.connect(new InetSocketAddress(SERVER_IP,SERVER_PORT)); cf.awaitUninterruptibly(); cf.getSession().getCloseFuture().awaitUninterruptibly(); connector.dispose(); } }
运行程序:
1.服务端打印:
Mina server is listing port:8899 client connection : /127.0.0.1:50497 receive client message : [ client started ] receive client message : [ Hello World! ] receive client message : [ client received num is : 1, request next num ] receive client message : [ client received num is : 2, request next num ] receive client message : [ client received num is : 3, request next num ] receive client message : [ client received num is : 4, request next num ] receive client message : [ client received num is : 5, request next num ] receive client message : [ client received num is : 6, request next num ] receive client message : [ client received num is : 7, request next num ] receive client message : [ client received num is : 8, request next num ] receive client message : [ client received num is : 9, request next num ] receive client message : [ client received num is : 10, request next num ] client disconnection : /127.0.0.1:50497 is Disconnection
2.客户端打印:
create connection to server :/127.0.0.1:8899 receive server num : [ 1 ] receive server num : [ 2 ] receive server num : [ 3 ] receive server num : [ 4 ] receive server num : [ 5 ] receive server num : [ 6 ] receive server num : [ 7 ] receive server num : [ 8 ] receive server num : [ 9 ] receive server num : [ 10 ] client disconnect
小结:
通过一个Hello World完成了基于mina编写的客户端和服务端通信的例子,接下通过解析源代码的方式来了解mina客户端和服务端通讯的过程。Apache MINA (3) NioSocketAcceptor初始化
代码在附件中
- example.rar (29.6 KB)
- 下载次数: 101
评论
1 楼
白天看黑夜
2017-10-20
Apache Mina Server 2.0 中文参考手册(带目录),有需要的自己下载吧
http://www.itmayun.com/it/files/226631678709806/resource/484719910403706/1.html
http://www.itmayun.com/it/files/226631678709806/resource/484719910403706/1.html
发表评论
-
Disruptor 学习笔记
2015-04-12 23:06 3593Disruptor 是什么 Disruptor ... -
Zookeeper 笔记
2015-04-12 22:42 1258ZooKeeper ZooKeeper是一 ... -
java jvm笔记
2014-09-26 16:41 01. jconsole 设置环境变量:export DI ... -
Netty 源码阅读学习
2014-09-18 21:40 11125背景 最忌工作中接触到Netty相关应用场景,之 ... -
ThreadLocal
2014-08-05 21:08 543ThreadLocal作用 ThreadLocal提供了 ... -
ReentrantLock AQS 源码阅读笔记
2014-08-05 21:06 1216ReentrantLock是JDK1.5引入的,它拥有与sy ... -
Java 内存可见性与volatile
2014-06-28 23:24 2705在多核系统中,处理 ... -
ubuntu 搭建开发环境
2014-05-04 14:37 0win7 硬盘安装方法: http://diybbs.z ... -
nio Selector 阻塞 唤醒 原理
2014-03-18 16:18 25231Selector:java nio无阻塞io实现的关键。阻 ... -
java nio Buffer 学习笔记
2014-03-17 14:54 1557Buffer 是一个对象, 它 ... -
java nio channel 学习笔记
2014-03-10 23:20 1438Channel直译就是通道的意思,通道表示对数据源头和数据 ... -
java 动态代理
2013-09-25 23:29 1086java的动态代理可以动态的创建并动态的处理所代理的方法调 ... -
java 泛型通配符
2013-09-25 23:25 957泛型是Java SE 1.5的新特性,泛型的本质是参数化类 ... -
java堆和栈
2013-09-23 22:58 944Java把内存划分成两种 ... -
Java nio 基础概念笔记
2012-12-27 12:09 1216Channel: ServerSocketChanne ... -
Apache MINA (4) 接收处理请求的过程
2012-12-23 23:50 8588上一篇博客 Apache MINA (3) NioSocket ... -
Apache MINA (3) NioSocketAcceptor初始化
2012-12-09 16:53 9263上一篇博客Apache MINA (2) Hello Worl ... -
Apache MINA (1) 简介
2012-07-26 22:14 2445简介: Apache MINA(Mult ... -
BufferedInputStream 源码学习笔记
2012-06-17 19:01 9631BufferedInputStream 是一个带有内存缓冲的 ... -
java 反射内部类
2011-01-17 22:05 4560内部类的初始化同一般类的初始化基本相同,只是内部类的类名全称有 ...
相关推荐
**Mina入门:Mina版之HelloWorld** Apache Mina是一个开源项目,它提供了一个高度模块化、高性能的网络通信框架。Mina旨在简化网络应用的开发,支持多种传输协议,如TCP、UDP、HTTP、FTP等。在这个“Mina入门:Mina...
Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)
Apache MINA2实用手册 Apache MINA2实用手册
Apache Mina是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个"apache-mina-2.0.4.rar"压缩包包含的是Apache Mina 2.0.4版本的源代码,是深入理解和定制Mina的...
在这个"Apache MINA2学习笔记DEMO"中,我们很可能会看到如何使用MINA来创建一个自定义协议的示例。自定义协议通常是为了满足特定应用的需求,例如高效的数据传输、安全性或者特定的编码格式。MINA允许开发者定义自己...
深入理解Apache_Mina_(2)----_与IoFilter相关的几个类 深入理解Apache_Mina_(3)----_与IoHandler相关的几个类 深入理解Apache_Mina_(4)----_IoFilter和IoHandler的区别和联系 深入理解Apache_Mina_(5)----_配置Mina...
Apache Mina2是一个高度可扩展且高性能的网络通信框架,主要设计用于简化开发网络应用,如TCP/IP和UDP协议的服务端和客户端。它提供了一种事件驱动、非阻塞I/O模型,使得开发者能够更专注于业务逻辑,而不是底层的...
Apache Mina是一个开源框架,主要用于构建高性能、高可用性的网络应用程序。这个压缩包包含了全面的学习资料,适合初学者深入理解Mina的原理和使用方法。其中,中文参考手册的加入使得学习过程更加友好,便于非英语...
Apache Mina是一个高度可扩展的网络通信框架,主要用于构建高性能、高效率的服务端应用程序。它提供了事件驱动、异步I/O处理模型,使得开发者能够更专注于业务逻辑,而不是底层网络编程的复杂性。Mina主要应用于Java...
### Apache Mina 2完全自学手册关键知识点解析 #### 引言 Apache Mina 2是Apache项目下的一款高性能、高可扩展性的网络应用框架,它简化了Java NIO编程,使得开发者能够更加轻松地构建复杂的网络应用。Mina通过...
Apache Mina是一个开源项目,主要用于构建高性能、高可用性的网络通信应用。它是Java语言开发的,提供了一套简单而强大的API,使得开发者可以方便地创建网络服务器和客户端应用程序。Mina的目标是简化网络编程,使其...
Apache MINA(Multipurpose Infrastructure for Network Applications)是一个开源框架,主要设计用于简化网络应用程序的开发,尤其是基于TCP和UDP协议的应用。它提供了高度可扩展和高性能的非阻塞I/O模型,使得...
Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,用于构建高性能、高可用性的网络应用程序。MINA 提供了一种简单而强大的API,开发者可以使用它来处理TCP/IP和UDP/IP协议,如...
Apache MINA(Multipurpose Infrastructure for Network Applications)是一个高性能、异步事件驱动的网络应用程序框架,主要用于简化开发高质量的网络服务。这个框架适用于多种协议,如TCP/IP和UDP/IP,以及NIO(非...
Apache MINA是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。 当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版...
### Apache MINA 2.0 用户指南:基础知识 #### 基础概念介绍 Apache MINA 2.0 是一款高性能且易于使用的网络应用程序框架,它简化了开发人员在网络编程方面的负担,允许开发者专注于应用程序的核心功能,而不是底层...
标题中的"Apache-Mina-2.rar"和"mina-mina-core-1.1.3"表明这是关于Apache Mina 2.x版本,特别是其核心模块的1.1.3版本。 Apache Mina的名称来源于"Multi-purpose Infrastructure for Network Applications",它...
Apache MINA是一个高性能、异步事件驱动的网络应用程序框架,主要设计用于简化开发服务器端的高性能网络应用。这个框架提供了一种抽象层,允许开发者使用相同的API处理多种不同的传输协议,如TCP/IP、UDP/IP以及SSL/...
2. **API设计**:Mina提供了一套清晰且灵活的API,包括IoSession(会话)、IoHandler(处理器)、IoFilter(过滤器)等接口,使得开发者可以方便地控制数据的读写、会话管理和事件处理。 3. **IoSession**:...