`
pope945
  • 浏览: 9576 次
  • 来自: ...
社区版块
存档分类
最新评论

JAVA 通讯框架

阅读更多
循证架构之QuickServer篇

作者:LeonW

“循证架构”一词虽是新创,但也可算是新瓶装老酒了。Rod用之来循证Spring等轻量级框架之优势、EJB之劣势。

前一段做了个GPRS服务器的系统,也尝试了把“循证架构”的循证思路。竟然要循证,总得先列举下需求:

首先,服务器必须与GPRS发送设备进行通讯, 数据的接收、发送、检查链路状态等基本功能,还需要具体分析包文,组包等业务功能的处理。其次,工期很紧,风险分析中列为第一大风险。再者,服务器的稳定性、可靠性也是一大重点。最后,需要提供对服务器管理的接口。

手头也有些较为成熟的网络通讯的基础代码,拿来复用解决1,3问题也非难事,倒是4需要进行开发。不过早就听闻 Mina、Cindy等大名(下载Mina代码过程中反倒发现本文的主角QuickServer),于是就对这几个框架循证了一遍,寻找合适开发的网络通 讯框架。

从功能上看,Mina、Cindy、QuickServer实现的功能也基本差不多,都是封装基本的网络IO操作,暴露事件接口供二次开发。

Mina需要继承IOHandlerAdapter类或ProtocolHandlerAdapter类,从该类中继承各事件方法实现业务操作。 Cindy也需要继承SessionHandlerAdapter具体类,跟Mina类似。QuickServer则需要实现接口 ClientEventHandler实现业务功能。这些类和接口提供的事件大致雷同:Connected,Closed,Received,Sent, Timeout等等。

Mina和Cindy使用了nio,而QuickServer则同时支持blockingIO和nio,需要进行配置选择(一个遗憾就 是QuickServer的nio模式下竟然不支持Timeout事件)。Mina实现中有一个很好的设计就是剥离IO层和Protocol层,作者的用 意是想在IO层实现对IO的处理,在Protocol实现对业务的处理,很好的一个分层思想。QuickServer则是一个大杂烩,把各种IO处理封装 在 BasicClientHandler中,里面还混杂了blockingIO、NIO等操作。

额外功能上,Mina和Cindy都可以 支持一个进程中开启多个服务端口进行不同处理,而QuickServer则不行。不过QuickServer提供了另外一个非常实用的功能-管理服务端 口,通过其设定的一些指令查询服务器的状态、控制服务器等。此功能成为最后选择的最大优势。其他例如IP过滤的功能在QuickServer中只需要进行 配置即可。

这次没对这三个服务器在性能上进行比较。以后再找机会完成:-)

从代码质量上来看,无疑Mina和Cindy占了 上风,QuickServer的分层实在不咋样。Mina和Cindy有不少相似的地方。而QuickServer的目的与其有所不同,集成许多方便的功 能,甚至还加入数据库连接池的功能(感觉作者有点无聊了)。最后的循证其实还是选了个最实用的工具,的确减少不少的工作量。此后还遇到一些二进制的问题就 不表了。



MINA is a good framwork

作者:fisher

Netty2的作者TrustinLee在为Apache LDAP项目所作的通讯基础框架MINA中显示了在通讯框架方面雄厚的实力,MINA是迄今为止我见过在java领域最好的通讯基础件,看得出,他通过Netty2的经验积累加上对ACE等传统大型框架的理解之后,在制作MINA的一开始就确定了一个近似于完美的架构,同时,我在RoadMap中看到MINA与Spring、JMX和OSGI的结合计划,虽然不知道什么时候能够完成,但光看这个RoadMap已经很让人激动了。

在MINA的服务绑定上,一开始就使用了serviceRegistry类这种中控型的注册绑定方式,看得出他对OSGI有一定研究并已决意向其靠拢。

而借鉴于ACE的Accepter和Connector结构使得Session的使用更加方便,同时分为IO层和Protocol两层的通讯基础件也是使得使用变得很方便。

最后要提一下的是作者使用的FilterChain式结构来加载Filter,使得很多非通讯核心问题得以从基础件中剥离出来,甚至连线程池模式都可以使用Filter来指定,虽然自己制作的线程池要想结合到MINA中需要一些额外的努力,但是仍然极大的增加了框架的灵活性。



MINA vs. QuickServer

作者:fisher

First for all, QuickServer is licensed as LGPL, and MINA as ASL.

从我个人角度而言,去年看过QuickServer的源码,我在项目中采用的每一个框架或类库都会做综合评价,通常不会是一个原因导致我采用或没有采用某个库或框架,具体最后没有采用QuickServer的原因忘记了,但是当时给我的总体感觉是,QuickServer虽然很方便,但不会让我在架构上得到新的好处。而它最大的优点则是,支持JDK1.3(如果没记错的话),另外就是License的问题

下面看一看来自TrusinLee的评论:

Thank for the information about another network application framework.  I found a few differences:

Ø         QuickServer supports blocking mode.  (MINA supports only non-blocking mode, but you can make your operation block at your will.)

Ø         QuickServer provides GUI-based admin.  (MINA doesn't have one yet, but will have full JMX support soon, which is a standard.)

Ø         QuickServer uses java.util.logging.  (MINA uses SLF4J, which is a safe replacement of commons-logging.)

Ø         QuickServer uses its own XML settings.  (MINA provides Spring framework integration instead.)

Ø         QuickServer can specify maximum number of clients allowed.  (MINA can do this using a filter, but not implemented by default.  Of course, this will be implemented as an overload prevention filter.)

Ø         QuickServer team has one crew.  (MINA has three crews.)

Ø         QuickServer project started in 2003.  (MINA started in 2005.)

Ø         QuickServer has a difference event handler interface from MINA.  (You'll have to compare it by yourself.  IMHO, MINA has one simple enough handler which covers all QuickServer provides.)

Ø         QuickServer doesn't support UDP at all.  (MINA does)

Ø         QuickServer doesn't support client-side API at all.  (MINA does)

Ø         QuickServer integrated authentication and text protocol in its core.  (MINA didn't and they are considered as a cross-cutting concern that a filter should take care of.  IMHO, MINA is more extensible here.)



Cindy2.x比MINA性能好是可以预见的,原因在于MINA提供的ByteBuffer和FilterChain。

Cindy3.x源代码我没有看,所以不好评价。

关于MINA的效率问题,在MINA的maillist中也被提出,似乎有相应的issue正要被加入到它的Issue Tracker中。

Cindy3.x才刚刚开始,我认为多给Crmky一些时间,他一定可以将架构设计的更好。

MINA在设计上也有少许问题,他的IoFilterChain将FilterManager和FilterChain合而为一,在看其代码的时候会觉得很乱。另外,为了保证包的顺序,一个IoSession上的Handler在上一次read调用没有返回前,是不会被再次调用的。我认为MINA的基础架构在1.0和1.1版本之间还会变化,以适应新加入的configuration方式。另外,MINA会产生一些内存垃圾,我用profiler检查过MINA,似乎是SocketIoProcessor中的某个计数器在不停的产生2byte的什么东东(记不太情了),不过似乎Trustin也注意到这个问题了,最近他说会在1.0release之后改善效率和内存的问题。

你可以到Crmky的blog上发帖子,看看他是否愿意提供一个Cindy3.X和MINA的对比。

总体来说,java的通讯框架设计并不特别注重效率,而追求架构上的优雅,当然,这也和java中本来能够进行效率调优的手段就不多有关系,如果真要优化,可能还是需要使用JDK5.0以上提供的高效的内存操作,另外,据说在Linxu2.6内核以后,Mustang的NIO使用了Linux的epoll来实现select(),也许会对目前的IO效率有所帮助。
分享到:
评论

相关推荐

    java mina 通讯框架

    java mina 通讯框架

    JAVA多服务器通讯框架-聊天功能演示程序 V0.1 alpha

    JAVA多服务器通讯框架-聊天功能演示程序 V0.1 alpha 2012 瞿正峰版权所有,保留所有权利 中国 杭州 一、概述 JAVA多服务器通讯框架是基于NIO开发的Socket通讯框架,实现了客户端和服务器,服务器与服务器...

    JAVA TCP和UDP Socket通信框架

    这个Java框架可能包含了以下功能: - 对TCP和UDP通信的封装,简化了客户端和服务器的创建和数据交换过程。 - 回调接口设计,使得开发者可以自定义数据接收和发送后的处理逻辑。 - 可能包含异常处理和连接管理机制,...

    JGroups(Java多播通讯框架) v4.0.0.CR1.zip

    JGroups(Java多播通讯框架)简介 JGroups是一个可靠的群组通讯Java工具包。它基于IP组播(IP multicast),但在可靠性,组成员管理上对它作了扩展。 JGroups的可靠性体现在: 1,对所有接收者的消息的无丢失传输...

    TCP通讯框架资源包,mina 通讯框架

    其中,Mina作为一个强大的通讯框架,深受Java开发者们的喜爱。本资源包专注于TCP通讯框架,特别是Mina框架的使用,旨在帮助开发者理解和应用这个强大的工具。 Mina,全称为“Apache MINA (Multipurpose ...

    JAVA源码Java多播通讯框架JGroups

    JAVA源码Java多播通讯框架JGroups

    JAVA源码WebSocket通讯框架jWebSocket

    JAVA源码WebSocket通讯框架jWebSocket

    Java NIO通信框架在电信领域的实践

    ### Java NIO通信框架在电信领域的实践 #### 华为电信软件技术架构演进 **1.1 电信软件概述** 电信软件是一个宽泛的概念,根据功能和应用场景的不同大致可以分为两大类:系统软件和业务应用软件。系统软件通常...

    java资源Java多播通讯框架JGroups

    java资源Java多播通讯框架 JGroups提取方式是百度网盘分享地址

    java资源WebSocket通讯框架 jWebSocket

    java资源WebSocket通讯框架 jWebSocket提取方式是百度网盘分享地址

    java源码:Java多播通讯框架 JGroups.zip

    java源码:Java多播通讯框架 JGroups.zip

    java源码:WebSocket通讯框架 jWebSocket.rar

    在Java中,实现WebSocket通信的一个常见框架是jWebSocket,它是一个开源项目,为开发者提供了简单易用的API来构建WebSocket应用。 jWebSocket的主要特点和功能包括: 1. **轻量级**: jWebSocket框架设计简洁,易于...

    Java多播通讯框架 JGroups

    Java多播通讯框架JGroups是Java开发者用于构建高可用、高性能和可伸缩的集群通信系统的重要工具。它提供了一套全面的协议栈,能够处理网络中的节点发现、消息传递、故障检测和恢复等问题,从而使得开发分布式应用变...

    Java多播通讯框架 JGroups.7z

    Java多播通讯框架 JGroups.7z

    Flex与java通讯

    Flex作为Adobe推出的基于ActionScript的开放源代码框架,主要用于构建交互性强的用户界面,而Java则是一种广泛使用的后端开发语言,提供了强大的服务器端功能。二者结合可以实现前端与后端的有效数据交换,为用户...

    JAVA 通信框架MINA(包含心跳)

    Apache MINA 是一个开发高性能和高可伸缩性网络应用程序的网络应用框架。它提供了一个抽象的事件驱动的异步 API,可以使用 TCP/IP、UDP/IP、串口和虚拟机内部的管道等传输方式。Apache MINA 可以作为开发网络应用...

    基于java Swing 框架使用socket技术开发的即时通讯系统【源码+数据库】

    本项目是一套基于java Swing 框架使用socket技术开发的即时通讯系统,主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目可以直接作为bishe使用。 ...

    java串口通讯 物联网设备通讯dtu

    总的来说,`MainFrame.java`程序提供了一个基础框架,用于通过Java进行串口通讯,与物联网设备中的DTU进行交互,处理二进制和十六进制数据,并自定义通讯协议。理解并熟练掌握这些知识点对于开发和维护物联网应用至...

    Android即时通讯框架

    即时通讯(Instant Messaging,简称IM)是现代移动设备和计算机通信的重要组成部分,尤其在安卓平台上,构建一个高效、稳定的即时通讯框架对于开发社交应用或企业内部通讯系统至关重要。本资源提供了一个通过PC...

    Java springboot 整合mina 框架,nio通讯基础教程,mina框架基础教程.zip

    Java SpringBoot 整合Mina框架,涉及到的核心技术主要包括Java NIO(非阻塞I/O)、Mina框架以及SpringBoot的集成应用。本教程旨在帮助开发者深入理解和掌握这些技术,并提供了一个可直接使用的基础平台框架。 Java ...

Global site tag (gtag.js) - Google Analytics