分享

N.Space: 一个NIO框架——Cindy简介

 asdfaasdfas 2007-06-21

一个NIO框架——Cindy简介

Cindy简介 

(作者Blog: http://spaces./members/crmky
 
Cindy是一个基于java nio的I/O框架,支持TCP/UDP单播/UDP多播/Pipe,为应用程序提供了一个统一的接口去实现异步和同步的网络操作。

java io 包提供了一个简单的模型去处理网络流,它读写均为阻塞操作,在一般的应用里,用户总是开启一个独立线程或一个线程池去处理这些IO操作。它非常简单易用, 但在扩展性和效率上存在着一些问题。如果用户只需要一两个网络连接,开启几个独立线程操作无伤大雅,但是如果面对服务器端的成百上千个连接,采用 java io提供的机制,就需要同时开启成百上千个线程,即使能够处理过来,花在线程上下文切换的时间也远远多于网络操作的用时。

在JDK 1.4 中,Java引入了nio包,除开nio提供的一些其他功能外,最吸引人的就是引入了非阻塞IO的实现。但是直接使用nio中非阻塞I/O需要处理众多异 常,维护状态,为应用带来不必要的复杂性。并且JDK 1.4中的nio包只实现了普通TCP/UDP单播/Pipe,JDK 5.0中引入了 SSLEngine类,使得基于非阻塞I/O的TCP可以支持SSL和TLS,未来在JDK 6.0才会加入对非阻塞I/O UDP多播的实现。如果应用 程序只想使用同一个模型去操作网络I/O,而不想关心这些诸多限制,那么Cindy是一个很好的选择。

目前基于nio的开源I/O框架很 多,Cindy并不是唯一的选择,比较好实现如Netty2、MINA等等。由于是Cindy的作者,对Cindy的了解程度要高于对其他框架的了解程 度,这里所做的比较只是基于作者自身的看法,可能会有失偏颇。在你进行选择之前,你应该从你自身应用的角度进行仔细的比较。

Netty2 具有很好的构架,并且该框架非常有名,使用该框架的项目不少,这意味着开发团队持续更新的动力非常大(BTW,刚知道Netty2的开发已经停止了,抱 歉)。同时Netty2的文档非常齐全,并且支持JMX(这是我不熟悉的领域,不做评论)。Netty2的缺点就是实现代码的质量不是非常好,最大的缺点 就是只支持普通的TCP。

MINA是Netty2作者的一个新项目,该项目目前实现的版本已经支持TCP/UDP/Pipe,并且由它的 Roadmap上可得知将来会加入对JMX和容器的支持。我未曾使用过该项目,不过既然是Netty2作者的新项目,应该也吸收了Netty2的优点,并 且对Netty2中的缺点做了改良。从该项目带的Example来看,使用起来应该是非常简单的。

Cindy起源于Netty2之后,借 鉴了Netty2中MessageRecognizer类的设计,在当前的版本中已经全面支持普通TCP/Secure TCP/UDP单播/UDP多播 /Pipe,可以使用同一个模型进行同步/异步IO处理,并且成功的应用在JML项目中(Java Msn Messenger Library,开源项 目,目前发布的版本基于Cindy老的版本),并且在目前公司的项目中也有实际使用。Cindy目前并不打算加入对JMX的支持(不熟悉),也没有计划加 入对容器的支持(这个应该是应用做的事情),我想保持Cindy核心的简洁和高效,最好能够代替Socket/DatagramSocket的地位(简单 应用的话也许还是使用这个更好:))。Cindy目前缺点是文档相对较少以及应用的项目比较少,希望这几篇文档能够稍微弥补以下Cindy在这文档方面的 不足。

Cindy:http://cindy.

Netty2:http:///dev/

MINA:http://www./~trustin/mina-20050207/index.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多