- 浏览: 73658 次
- 性别:
- 来自: 安徽省
文章分类
最新评论
-
di1984HIT:
真心学习了,不错。
Java编程中“为了性能”需做的26件事 -
di1984HIT:
context上面有个属性控制吧。
tomcat 不能自动解压war包问题 -
di1984HIT:
没用过试验一下。
double 加法计算 -
di1984HIT:
学习了,不错。
PHP 中& & 与 || 的区别 -
306963591:
我理解Java中的引用传递是传递对象的地址
Java 引用传递与值传递
实在无聊,考虑把当前应用的通讯模式由http移植为socket, 服务器这块因为对NIO并不熟悉,所以考虑使用现成的网络通讯框架进行移植,花了点时间测试比较流行的mina和xsocket。
== 相同点 ==
1. 都对nio进行了有效屏蔽, 可以简化开发过程, 对于文本流模式的应用,两者都非常简单,实现一个基本的handle就可以
2. 提供了一些常见的辅助功能,比如日志等, mina支持更全面一些
3. 可以通过绑定各种附加属性实现基于会话的工作方式,会话控制都提供了完整的支持
4. 理论上都可以提供lowerlevel数据的处理支持, 不过实际操作, mina比较复杂,文档也缺失。
5. 都提供了客户端使用包,简化客户端开发
6. 都提供了jmx的集成支持,可以通过第三方工具来监控使用状况
== 差异 ==
两者设计的出发点不同, xsocket是一个轻量级的解决方案,核心思想是屏蔽,简化nio方式的的开发,并不需要过多的学习。 Mina的目的在我看来更多的是提供一个服务器开发的基础平台,相对来说提供的支持要全面,也复杂的多, 如果缺少对java nio框架的深入理解, 对mina的一些特性就难以利用。 对数据的处理,xsocket的出发点是通过提供对基本类型的支持来做到简单灵活的操作, 而mina则希望在更高的层面上即通过自定义的协议扩展来屏蔽掉应用对数据的处理操作,把核心放置到业务处理逻辑上。
做一个简单比较如下
- 自定义协议
* mina通过 encoder 和decoder模式来支持自定义的协议,目的是屏蔽底层数据的操作,对于客户端和服务器都是java的应用,处理比较简单。缺省提供了对文本, java对象的处理。但是对于客户端是j2me或者其他语言的,这种模式就比较难以使用了。比如我当前的协议是以byte[]为基础的,mina就不能很好的处理。
* xsocket并不关注这点, 关注的是对nio的屏蔽。
- 对filter模式的支持
* mina利用filter模式提供对数据流操作的封装和扩展,是核心模式。 另外也提供了一些缺省的有用filter,比如compress等
* xsocket不关注这个问题, 所以说mina更象应用服务器平台, xscoket是一个通讯模块 - 缺省对文本操作的支持
文本流模式是比较常见的网络应用模式,比如http , smtp服务,聊天应用等
* mina 通过增加一个!TextLineCodecFactory filter来提供对文本操作的支持, 传入的数据会被自动整理成文本信息。 但是并未提供额外的处理支持
new TextLineCodecFactory()));
public void messageReceived(IoSession session, Object message) {
Logger log = LoggerFactory.getLogger(ChatProtocolHandler.class);
log.info("received: " + message);
String theMessage = (String) message;
String[] result = theMessage.split(" ", 2); //自己分析文本段落
* xscoket把对文本的支持做为基本属性,并且提供了Delimiter这样的支持,相比mina要好用一些。而对于解析http中mulitpart这样的文本二进制混合的结构,显然要比mina 好使。
System.out.println(data); //中文读取正常
nbc.write(data + "\r\n"); //回写是乱码
nbc.write(data + "\r\n", “gbk”); //正常
- 对流的操作
* mina提供一个streamiohandler的类, 可以使用基于流的方式进行处理操作,实际使用有点复杂,需要在一个独立的线程中工作,会增加服务器负担。
* xsocket 没仔细研究, 但是因为提供了对基本类型操作的支持,所以可以自行包装流来解决,比较简单。 - 对lowerlevel方式数据的处理
* mina需要熟悉nio框架部分的bytebuffer的操作
* xsocket可以直接支持以基本类型的模式进行操作, 也支持使用bytebuffer的方式,更加简单灵活 - 对fragment的处理 tcp网络的特性,即一次数据可能分为多个包发送, 也就是fragment
* mina对分包会直接报错, 需要使用会话控制的方式来对包进行组装处理,比较复杂。 另外从服务器向客户端写大包的时候, 1.1和2.0处理不同,2.0不做控制会直接报一个bytebuffer溢出的错误。
* xscoket缺省会吞掉这个错误,自动采用重试的方式尝试读取数据,对开发来说比较简单,另外也可以提供类似mina那样的安全处理模式,代码比mina要简单。 - 文档支持
* mina 比较多,但是语焉不详,问题要靠自己啃代码和上论坛
* xsocket 只有一篇文档, 但是比较详尽的介绍了所有需要的知识。另外,视乎, xsocket的代码质量要更好一些, mina更向是不断学习过程中不断完善改进的作品。 - 学习曲线
*mina 要较好的使用需要对nio有深入的了解, 一般使用学习难度不大
* xsocket 基本不用学习
== 结论 ==
我的应用是手机和服务器端通过自定义的二进制协议进行通讯,我需要的是一个轻量级的解决方案。
使用mina的自定义协议方式处理需要额外的工作量, 而mina对直接操作基本数据类型的支持并不好,或者说需要我深入的学习nio部分内容。 最终因为fragment和对lowerlevel数据的更简单的支持让我选择了xsocket,很轻松的完成了移植工作。
如果一开始设计通讯部分就接触mina的话,我可能会坚持使用mina的自定义协议方式来处理,但是就目前来说,他太复杂了,将来有时间,可以做为应用模式的学习对mina进行深入解剖。
== 其他 ==
其他常见的java的通讯协议框架
qickeserver : 以文本流为模式的通讯框架
netty: mina的前身
cindy: 国人在接触netty之后开发的, 我接触时已经停止开发一年了,所以基本不予考虑。
== 补充 ==
下午无聊又玩了一下quick server。
1. quickserver 1.4.7 现在有提供对binary模式的支持,可以使用一个ClientBinaryHandle处理二进制流,不过处理稍显复杂,还要多开一个线程。对当前的应用来说xsocket已经足够了。
2. quickserver 在易用性和复杂程度方面在xsocket和mina之间, 架构上更倾向于解决较复杂的问题,和mina有很多相似处。
较复杂的数据处理也需要引入流和bytebuffer的概念。
3. quick的文档和例子都不错, 要明显比mina好, 有点不爽的是配置文件有点婆妈,考虑到我的一般应用都是要集成到服务器中使用的,觉得有点烦,不过基本可以放弃研究mina了。
4. quick 架构上handle的使用可以配置,产生类似mina那种filter的效果,还是蛮有意思的。
5. 另外还自己实现了一些婆婆妈妈的管理界面,有空看看完。
最后许可证协议只要使用binary的包,商用就没问题。
其实这3个框架都是以回调和组装为中心的设计,关注点有所不同而已。自己比较懒还是喜欢那种越简单越好的,看mina有点头疼。
发表评论
-
Java 集合 Stack、Queue、Map插入、移除和遍历
2013-02-22 14:55 54311、Stack 操作 // Stack 类表示后进先出 ... -
Java 集合 ArrayList和LinkedList的区别
2013-02-22 13:48 955一般大家都知道ArrayList和LinkedList的大致 ... -
Java几款性能分析工具的对比
2013-02-21 14:24 844在给客户进行应用程序维护的过程中,我注意到一些关于高负载条件 ... -
Java编程中“为了性能”需做的26件事
2013-02-21 14:16 953最近的机器内存又爆满 ... -
Java 引用传递与值传递
2013-02-21 12:02 1367总结: 我理解Java中的引用传递是传递对象的地址。 ... -
Java 基本数据类型
2013-02-21 11:21 1105数据类型 大小 范围 默认值 byte ... -
Spring 源码下载及编译
2012-09-13 00:41 2336svn下载https://github.com/Spr ... -
Spring 源码编译 出错FAILURE: Build failed with an exception.
2012-09-13 00:01 4489编译过程中出现如下错误 FAILURE: Bui ... -
double 加法计算
2011-12-13 09:24 1594/* * @(#) Test.java 1.0 2 ... -
findbugs 出错类型及对应解释
2011-11-01 10:13 2418findbugs 出错类型及对应解释1、Dead sto ... -
Java集合类
2011-09-05 15:22 1124Java集合类 1.Java的集合类是一个特别有用的集合类,可 ... -
java io
2011-08-31 16:40 1079什么是流: 流是一个 ... -
Java编程中影响性能的一些特点
2011-08-31 09:03 714文中将提供一些在Java编程中影响性能的一些特点,为了能够提高 ... -
JDK与JRE的区别
2011-08-24 08:39 859很多程序员已经干了一 ... -
java 获取路径
2011-08-03 17:34 6341、利用System.getProperty()函数获取当 ... -
简单工厂模式的例子
2011-07-27 09:46 859本示例简单的实现了工 ... -
简单spring aop 例子
2011-07-21 15:35 935最近比较空闲,于是看了spring方面的知识,看到spring ... -
FileSystemXmlApplicationContext与ClassPathXmlApplicationContext读取文件目录区别
2011-07-20 17:50 948只为做个笔记 FileSystemXmlApplica ... -
超级简单Spring3 Quartz 例子
2011-07-20 11:28 2137关于Spring Quartz 我就不多介绍,因为小弟是个菜鸟 ... -
求java动态代理例子
2011-06-21 09:29 587希望大家可以给我讲解一些java动态代理原理及例子说明,谢谢
相关推荐
2. **传输**:Dubbo 支持多种传输协议,例如 Netty、Mina 和 XSocket 等。 - **Netty**:一个高性能的 NIO 框架,广泛应用于 Dubbo 中。 - **Mina**:另一个高性能的 NIO 框架,提供了一套完整的客户端/服务器实现...
nSocket与mina、netty、xSocket这类高性能的设计不同之处在于,nSocket将直接使用java7中的异步通道构建异步操作,并在后期将弱化C/S模式,逐步过渡到P2P模式。 编写目的: 简化NIO开发过程,将业务与实现...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰效果 Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、...