Mina框架发送对象
2013-10-29 16:49
281 查看
/************************以下内容为为转载内容***********************************/
转载地址:
http://www.himigame.com/apache-mina/831.html
Hibernate系列学习阶段到此结束了,那么紧接着进入Apache Mina的开发学习,很多童鞋在微薄和QQ中疑问Himi为什么突然脱离游戏开发了,嘿嘿,其实可能更多的童鞋已经看出来了,Himi在偏向服务器Server端开发了,Hibernate、MySQL等都是为了Server端Mina开发而做的铺垫,当前的Apache Mina才是Himi真正的目的。哈哈。Himi的技术目标是“一个人能做出一个网游~”,OK.不多说其他的了,开始Himi的Apache
mina开发之旅吧。
对于Apache Mina不太连接的童鞋,请移步到如下百度百科连接进行学习了解:
http://baike.baidu.com/view/2668084.htm
首先建立一个new project(Server端),这里Himi使用IDE是 eclipse;
OK,首先我们这里先配置下环境:对于Mina的日志输出使用的是slf4j,对于slf4j在开发Hibernate的时候已经很熟悉了,不需要再介绍了。另外一方面就是加入mina的core核心jar包;
1. mina-core.jar 2. slf4j-api.jar 3.slf4j-simple.jar
然后我们首先创建两个类:
HimiObject.java
这个类是个消息Object,它用于server与client端的交互的数据,它需要序列化,所以我们使用Serializable接口;至于在mina框架中起到什么作用这个后续来说;
ClientMinaServerHanlder.java
本类主要是继承IoHandlerAdapter并且重写其类的一些函数,至于每个函数的作用Himi都已经在代码中加以注视;本类的作用:
此类是用以处理消息的也可说是个消息处理器,当客户端有消息传给server端的时候,或者server端传递给Client端的时候(Client端也会有个消息处理器)都会通过消息处理器进行处理。
OK,下面我们来书写server端的main函数类:
IoService 是负责底层通讯接入,而 IoHandler 是负责业务处理的。那么 MINA 架构图中的 IoFilter 作何用途呢?答案是你想作何用途都可以。但是有一个用途却是必须的,那就是作为 IoService 和 IoHandler 之间的桥梁。IoHandler 接口中最重要的一个方法是 messageReceived,这个方法的第二个参数是一个 Object 型的消息,总所周知,Object
是所有 Java 对象的基础,那到底谁来决定这个消息到底是什么类型呢?这个取决于我们后面设定的过滤器!
对于在mina中建立一个server,步骤如下:
1. 建立一个SockerAcceptor ,除了启动server之外它还可以为我们可以生成过滤器DefaultIoFilterChainBuilder、设置消息处理器等功能;
2.设置过滤器
3. 设置消息处理器
其实很容易不是么? 哈哈;
OK,这里多说一些:
对于消息处理器 DefaultIoFilterChainBuilder,它的作用是用于设定收发的形式,例如:
这样设置一个过滤器作用是将来自客户端输入的信息转换成一行行的文本后传递给 IoHandler,因此我们可以在 messageReceived 中直接将 msg 对象强制转换成 String 对象。
ps.而如果我们不提供任何过滤器的话,那么在 messageReceived 方法中的第二个参数类型就是一个 byte 的缓冲区,对应的类是 org.apache.mina.common.ByteBuffer。虽然你也可以将解析客户端信息放在 IoHandler 中来做,但这并不是推荐的做法,使原来清晰的模型又模糊起来,变得 IoHandler 不只是业务处理,还得充当协议解析的任务。
mina自身带有一些常用的过滤器,例如LoggingFilter(日志记录)、BlackListFilter(黑名单过滤)、CompressionFilter(压缩)、SSLFilter(SSL加密)等。
当我们设置如下:
这样以来我们server可以收发Object对象啦;
这里是设置消息处理器,绑定在我们的ClientMinaServerHanlder类上,其实mina对于收发处理已经完全交给开发者来进行处理,所以至于在消息处理器如何编写和处理就放任不会管了;
OK,现在我们可以run一下启动server端了;
当然我们现在也可以来测试了,当前我们还没有书写Client端的代码,所以我们使用terminal终端进行测试,OK,打开你的terminal
然后输入 telnet localhost 9988
观察服务器打印:
OK,没有任何问题;但是这时候大家不要在终端书写内容给server,因为我们server的消息处理器中的接受Client的函数中做了如下处理:
Himi这里server处理client端发来的数据处理函数(如上代码)中,当Client发送数据过来的时候,将消息message强制转换成了一个HimiObject对象,然后改个name重写发给Client端,但是由于Client端是使用终端模拟登陆根本无法接受这个对象,所以会出异常;
但是到这里大家应该懂得,HimiObject类的作用了;哈哈
下面我们来书写Client客户端,对于建立一个Client端,其实步骤雷同,步骤如下:
1 . 建立一个NioSocketConnector对象;
2. 设定过滤器
3. 设定消息处理器
代码如下:
不多说了,很eazy:那么我们继续看Clent端的消息处理器以及HimiObject:
ClentMinaServerHanlder:
Client的HimiObject与服务器Server的HimiObejct类一模一样!
可能有童鞋不理解为什么server端与client的HimiObject一模一样,这里Himi说下,通过Client端的消息处理器可以看出,当我们Client端连接到服务器后,首先会写给Server端一个HimiObject对象!那么服务器之前说过了,接受到Client端的消息后首先将消息强制转换成HimiObject对象然后处理;
既然Client端发的是Object,那么当然我们的服务器也要有对应的此Object对象才可以,否则如何获取这个Object? 大家应该很容易理解;
OK,不多说直接运行Client端,观察结果:
OK,结果正常。
Client与Server消息逻辑如下:
1. Client->传递HimiObject给Server
2. Server端接受message强制转换HimiObject,并且设置其name为serverHimi,然后再传递给Client
3. 客户端接受message强制转换HimiObject,然后获取此类的name打印出来!
转载地址:
http://www.himigame.com/apache-mina/831.html
Hibernate系列学习阶段到此结束了,那么紧接着进入Apache Mina的开发学习,很多童鞋在微薄和QQ中疑问Himi为什么突然脱离游戏开发了,嘿嘿,其实可能更多的童鞋已经看出来了,Himi在偏向服务器Server端开发了,Hibernate、MySQL等都是为了Server端Mina开发而做的铺垫,当前的Apache Mina才是Himi真正的目的。哈哈。Himi的技术目标是“一个人能做出一个网游~”,OK.不多说其他的了,开始Himi的Apache
mina开发之旅吧。
对于Apache Mina不太连接的童鞋,请移步到如下百度百科连接进行学习了解:
http://baike.baidu.com/view/2668084.htm
首先建立一个new project(Server端),这里Himi使用IDE是 eclipse;
OK,首先我们这里先配置下环境:对于Mina的日志输出使用的是slf4j,对于slf4j在开发Hibernate的时候已经很熟悉了,不需要再介绍了。另外一方面就是加入mina的core核心jar包;
1. mina-core.jar 2. slf4j-api.jar 3.slf4j-simple.jar
然后我们首先创建两个类:
HimiObject.java
ClientMinaServerHanlder.java
此类是用以处理消息的也可说是个消息处理器,当客户端有消息传给server端的时候,或者server端传递给Client端的时候(Client端也会有个消息处理器)都会通过消息处理器进行处理。
OK,下面我们来书写server端的main函数类:
是所有 Java 对象的基础,那到底谁来决定这个消息到底是什么类型呢?这个取决于我们后面设定的过滤器!
对于在mina中建立一个server,步骤如下:
1. 建立一个SockerAcceptor ,除了启动server之外它还可以为我们可以生成过滤器DefaultIoFilterChainBuilder、设置消息处理器等功能;
2.设置过滤器
3. 设置消息处理器
其实很容易不是么? 哈哈;
OK,这里多说一些:
对于消息处理器 DefaultIoFilterChainBuilder,它的作用是用于设定收发的形式,例如:
//创建一个接收数据过滤器 DefaultIoFilterChainBuilder chain = acceptor.getFilterChain(); //设定过滤器一行行(/r/n)的读取数据 chain.addLast("mychin", new ProtocolCodecFilter(new TextLineCodecFactory() ));
这样设置一个过滤器作用是将来自客户端输入的信息转换成一行行的文本后传递给 IoHandler,因此我们可以在 messageReceived 中直接将 msg 对象强制转换成 String 对象。
ps.而如果我们不提供任何过滤器的话,那么在 messageReceived 方法中的第二个参数类型就是一个 byte 的缓冲区,对应的类是 org.apache.mina.common.ByteBuffer。虽然你也可以将解析客户端信息放在 IoHandler 中来做,但这并不是推荐的做法,使原来清晰的模型又模糊起来,变得 IoHandler 不只是业务处理,还得充当协议解析的任务。
mina自身带有一些常用的过滤器,例如LoggingFilter(日志记录)、BlackListFilter(黑名单过滤)、CompressionFilter(压缩)、SSLFilter(SSL加密)等。
当我们设置如下:
OK,现在我们可以run一下启动server端了;
当然我们现在也可以来测试了,当前我们还没有书写Client端的代码,所以我们使用terminal终端进行测试,OK,打开你的terminal
然后输入 telnet localhost 9988
观察服务器打印:
OK,没有任何问题;但是这时候大家不要在终端书写内容给server,因为我们server的消息处理器中的接受Client的函数中做了如下处理:
但是到这里大家应该懂得,HimiObject类的作用了;哈哈
下面我们来书写Client客户端,对于建立一个Client端,其实步骤雷同,步骤如下:
1 . 建立一个NioSocketConnector对象;
2. 设定过滤器
3. 设定消息处理器
代码如下:
ClentMinaServerHanlder:
可能有童鞋不理解为什么server端与client的HimiObject一模一样,这里Himi说下,通过Client端的消息处理器可以看出,当我们Client端连接到服务器后,首先会写给Server端一个HimiObject对象!那么服务器之前说过了,接受到Client端的消息后首先将消息强制转换成HimiObject对象然后处理;
既然Client端发的是Object,那么当然我们的服务器也要有对应的此Object对象才可以,否则如何获取这个Object? 大家应该很容易理解;
OK,不多说直接运行Client端,观察结果:
OK,结果正常。
Client与Server消息逻辑如下:
1. Client->传递HimiObject给Server
2. Server端接受message强制转换HimiObject,并且设置其name为serverHimi,然后再传递给Client
3. 客户端接受message强制转换HimiObject,然后获取此类的name打印出来!
相关文章推荐
- 浅谈Java的Mina框架传递对象
- mina仿qq聊天功能,自定义协议,协议的编码和解码详解,发送xml对象json,mina开发大全,详细api,mina心跳
- android里面怎么使用mina框架与mina服务器连接之传对象
- Mina框架实现客户端与服务端实相互发送消息
- 浅谈Java的Mina框架传递对象
- mina框架-------NioSocketAcceptor和NioSocketConnector对象
- 基于mina服务器框架在android客户端接中文收不到消息以及发送不出中文的的问题
- 浅谈Java的Mina框架传递对象
- 基于mina服务器框架在android客户端接中文收不到消息以及发送不出中文的的问题
- Mina框架传递对象
- Mina框架数据发送流程
- NetworkComms框架介绍 序列化并发送对象
- Mina框架传递对象
- mina框架中logger接收与发送报文被省略的解决办法
- JAVA的Mina框架传递对象——一劳永逸(转载)
- 浅谈Java的Mina框架传递对象
- 基于mina服务器框架在android客户端接中文收不到消息以及发送不出中文的的问题
- Mina框架传递对象
- Mina框架传递对象
- 12.24笔记(关于//UIDynamic演练//多对象的附加行为//UIDynamic简单演练//UIDynamic//(CoreText框架)NSAttributedString)