`
sdbany
  • 浏览: 16956 次
最近访客 更多访客>>
文章分类
社区版块
存档分类

NIO框架的cindy,现在作者不再维护了吗?有没有什么好的NIO框架推荐?

阅读更多
最近要使用NIO框架,一开始找了MINA,结构很好,但性能和稳定性方面不太如意。后来再找了cindy,性能和稳定性都比MINA强多,但javaeyes的CVS、sourceforge和MSN的BLOG自从2006年后就再没有更新了,是不是作者放弃了?

另问,有没有一些好的NIO框架推荐?
分享到:
评论
20 楼 livensun 2009-05-06  
lqql 写道
可当连接20000时,你就知道MINA性能差了!

比较适合建内网,实话20000人的我还没有试过~ 囧
19 楼 lqql 2009-04-23  
可当连接20000时,你就知道MINA性能差了!
18 楼 bloodwolf_china 2009-03-20  
以前做过通信层,采用mina NIO方式开发,可以支持1000个连接(连接关闭由客户端负责,长连接),好像没发现性能方面的问题。
响应速度方面因为没有使用过其他框架,不好比较
17 楼 bachmozart 2009-03-05  
这个不太可能,底层的算法没看过,没法解释,不过这是TCP自己处理的,不会这么傻一直等着填满一个mss才发送的,应该只是由一个固定的延迟事件,超过则必须发送了
16 楼 unsid 2009-03-05  
bachmozart 写道
TcpNodelay是当待发送数据包很小时,不足一个mss大小时可能会和下次待发的数据包一并发出,以减少ack的数量,这个延迟时间是极短,普通应用完全察觉不到的


延迟时间极短是不是填充一个mass的时间短,如果就发送一个字节而没下文了,岂不永远也填不满永远也发不过去
15 楼 bachmozart 2009-03-05  
TcpNodelay是当待发送数据包很小时,不足一个mss大小时可能会和下次待发的数据包一并发出,以减少ack的数量,这个延迟时间是极短,普通应用完全察觉不到的
14 楼 unsid 2009-03-05  
另外关于JAVA程序里的BufferedOutputStream,这是程序级别的缓存,就算没有用BufferedOutputStream而直接用OutputStream发送一个字节,在TcpNoDelay=false的情况下,也不会立刻把这个字节发送出去,而还有底层TCP得nagle算法缓存着对不?
而如果用BufferedOutputStream的flush把未满的数据发送出去,那么这些数据如果未满TCP底层发送缓存,还是会换存在发送端,也不立刻发送出去,对不?
13 楼 unsid 2009-03-05  
sdh5724 写道
bachmozart 写道
sdh5724 写道
bachmozart 写道
sdh5724 写道
mina 性能不好.....我没有测试过, 但是我看到的有高并发使用的例子.


我用cindy和mina 2.0-m3 分别实现过一个简单的Memcached Server,用java-memcached-client测试发现cindy 性能比mina高很多,后来自己写了个基于简单的1:M 的NIO模型的server,性能也比mina高一些

不过看过mina代码,代码风格挺好的,功能也齐全,性能原因也不排除我使用不当的因素


任何框架, 都会比原始的结构性能差那么点。 框架要处理的东西会比较多。 框架的目的不是为了实现有多好的性能。 而是为了能有更好的处理问题的办法。 就像ibatis/hibernate他们都是降低性能的, 但是极大的提高了开发的速度。 但是只要降低的不是太离谱, 我们都是认为可接受的。除非你的应用真的要求非常高, 一般来说, 没有必要为这点性能去苛求。 像类似memcached server协议, 自己写thread pool来处理, 是非常快的,而且处理的网络代码也不超过1000行。 我觉得, 你要是能实现也是可以的。我认为mina是相当的快的, 因为mina避免了输入输出buff的内存分配过程, 这个在大规模并发下, 改善是非常明显的。


选择mina吧, 相信他。

注: memcached基本是属于小数据, 你应该把tcpnoday设置下, 另外, 应该适当设置下TCP的输入输出buffer大小。 看你的测试数据如何。不过,default 8K是大了点, 可以设置成1-4K。 毕竟是小数据么。


TcpNoDelay 还是不要设置啦,除非是那种实时传输的,比如远程桌面之类的,需要实时传输鼠标位置之类的,否则每个小数据包都加一个40字节的包头,还需要ACK,是比较恐怖的


现在是KM网络了, 怕什么40 BYTE而已, 根本不用担心, 这个是为低速网络设计的东西, 今天的网络没有多大的意义了, 现在网络游戏都要加这个, 不然延迟厉害。


奇怪,我从来没加过noDelay,为啥客户服务器从来没感觉到过延迟?开始我以为是测试并发小的缘故,后来一想由于发送缓存不满导致的延迟应该和客户连接数没关系.也许是我发的数据还算比较大,立刻就发出去了
12 楼 fjlyxx 2009-03-01  
流量不是问题 问题是握手会耗费多次连接  这样在高并发的情况下不是一个好事情  所以网路层的长短连接选择还真是一个难题.
定义数据包和靠令牌进行传输在一定程度上是能解决高并发的问题,但是也因此带来了一些新的问题,移动,联通SP网管基本上就是靠数据包定义交互协议的做法 我觉得可以借鉴一下.
11 楼 bachmozart 2009-03-01  
sdh5724 写道
bachmozart 写道
sdh5724 写道
bachmozart 写道
sdh5724 写道
mina 性能不好.....我没有测试过, 但是我看到的有高并发使用的例子.


我用cindy和mina 2.0-m3 分别实现过一个简单的Memcached Server,用java-memcached-client测试发现cindy 性能比mina高很多,后来自己写了个基于简单的1:M 的NIO模型的server,性能也比mina高一些

不过看过mina代码,代码风格挺好的,功能也齐全,性能原因也不排除我使用不当的因素


任何框架, 都会比原始的结构性能差那么点。 框架要处理的东西会比较多。 框架的目的不是为了实现有多好的性能。 而是为了能有更好的处理问题的办法。 就像ibatis/hibernate他们都是降低性能的, 但是极大的提高了开发的速度。 但是只要降低的不是太离谱, 我们都是认为可接受的。除非你的应用真的要求非常高, 一般来说, 没有必要为这点性能去苛求。 像类似memcached server协议, 自己写thread pool来处理, 是非常快的,而且处理的网络代码也不超过1000行。 我觉得, 你要是能实现也是可以的。我认为mina是相当的快的, 因为mina避免了输入输出buff的内存分配过程, 这个在大规模并发下, 改善是非常明显的。


选择mina吧, 相信他。

注: memcached基本是属于小数据, 你应该把tcpnoday设置下, 另外, 应该适当设置下TCP的输入输出buffer大小。 看你的测试数据如何。不过,default 8K是大了点, 可以设置成1-4K。 毕竟是小数据么。


TcpNoDelay 还是不要设置啦,除非是那种实时传输的,比如远程桌面之类的,需要实时传输鼠标位置之类的,否则每个小数据包都加一个40字节的包头,还需要ACK,是比较恐怖的


现在是KM网络了, 怕什么40 BYTE而已, 根本不用担心, 这个是为低速网络设计的东西, 今天的网络没有多大的意义了, 现在网络游戏都要加这个, 不然延迟厉害。


呵呵,具体情况确实要视真实网络环境而定
10 楼 sdh5724 2009-03-01  
bachmozart 写道
sdh5724 写道
bachmozart 写道
sdh5724 写道
mina 性能不好.....我没有测试过, 但是我看到的有高并发使用的例子.


我用cindy和mina 2.0-m3 分别实现过一个简单的Memcached Server,用java-memcached-client测试发现cindy 性能比mina高很多,后来自己写了个基于简单的1:M 的NIO模型的server,性能也比mina高一些

不过看过mina代码,代码风格挺好的,功能也齐全,性能原因也不排除我使用不当的因素


任何框架, 都会比原始的结构性能差那么点。 框架要处理的东西会比较多。 框架的目的不是为了实现有多好的性能。 而是为了能有更好的处理问题的办法。 就像ibatis/hibernate他们都是降低性能的, 但是极大的提高了开发的速度。 但是只要降低的不是太离谱, 我们都是认为可接受的。除非你的应用真的要求非常高, 一般来说, 没有必要为这点性能去苛求。 像类似memcached server协议, 自己写thread pool来处理, 是非常快的,而且处理的网络代码也不超过1000行。 我觉得, 你要是能实现也是可以的。我认为mina是相当的快的, 因为mina避免了输入输出buff的内存分配过程, 这个在大规模并发下, 改善是非常明显的。


选择mina吧, 相信他。

注: memcached基本是属于小数据, 你应该把tcpnoday设置下, 另外, 应该适当设置下TCP的输入输出buffer大小。 看你的测试数据如何。不过,default 8K是大了点, 可以设置成1-4K。 毕竟是小数据么。


TcpNoDelay 还是不要设置啦,除非是那种实时传输的,比如远程桌面之类的,需要实时传输鼠标位置之类的,否则每个小数据包都加一个40字节的包头,还需要ACK,是比较恐怖的


现在是KM网络了, 怕什么40 BYTE而已, 根本不用担心, 这个是为低速网络设计的东西, 今天的网络没有多大的意义了, 现在网络游戏都要加这个, 不然延迟厉害。
9 楼 bachmozart 2009-02-28  
sdh5724 写道
bachmozart 写道
sdh5724 写道
mina 性能不好.....我没有测试过, 但是我看到的有高并发使用的例子.


我用cindy和mina 2.0-m3 分别实现过一个简单的Memcached Server,用java-memcached-client测试发现cindy 性能比mina高很多,后来自己写了个基于简单的1:M 的NIO模型的server,性能也比mina高一些

不过看过mina代码,代码风格挺好的,功能也齐全,性能原因也不排除我使用不当的因素


任何框架, 都会比原始的结构性能差那么点。 框架要处理的东西会比较多。 框架的目的不是为了实现有多好的性能。 而是为了能有更好的处理问题的办法。 就像ibatis/hibernate他们都是降低性能的, 但是极大的提高了开发的速度。 但是只要降低的不是太离谱, 我们都是认为可接受的。除非你的应用真的要求非常高, 一般来说, 没有必要为这点性能去苛求。 像类似memcached server协议, 自己写thread pool来处理, 是非常快的,而且处理的网络代码也不超过1000行。 我觉得, 你要是能实现也是可以的。我认为mina是相当的快的, 因为mina避免了输入输出buff的内存分配过程, 这个在大规模并发下, 改善是非常明显的。


选择mina吧, 相信他。

注: memcached基本是属于小数据, 你应该把tcpnoday设置下, 另外, 应该适当设置下TCP的输入输出buffer大小。 看你的测试数据如何。不过,default 8K是大了点, 可以设置成1-4K。 毕竟是小数据么。


TcpNoDelay 还是不要设置啦,除非是那种实时传输的,比如远程桌面之类的,需要实时传输鼠标位置之类的,否则每个小数据包都加一个40字节的包头,还需要ACK,是比较恐怖的
8 楼 sdh5724 2009-02-28  
bachmozart 写道
sdh5724 写道
mina 性能不好.....我没有测试过, 但是我看到的有高并发使用的例子.


我用cindy和mina 2.0-m3 分别实现过一个简单的Memcached Server,用java-memcached-client测试发现cindy 性能比mina高很多,后来自己写了个基于简单的1:M 的NIO模型的server,性能也比mina高一些

不过看过mina代码,代码风格挺好的,功能也齐全,性能原因也不排除我使用不当的因素


任何框架, 都会比原始的结构性能差那么点。 框架要处理的东西会比较多。 框架的目的不是为了实现有多好的性能。 而是为了能有更好的处理问题的办法。 就像ibatis/hibernate他们都是降低性能的, 但是极大的提高了开发的速度。 但是只要降低的不是太离谱, 我们都是认为可接受的。除非你的应用真的要求非常高, 一般来说, 没有必要为这点性能去苛求。 像类似memcached server协议, 自己写thread pool来处理, 是非常快的,而且处理的网络代码也不超过1000行。 我觉得, 你要是能实现也是可以的。我认为mina是相当的快的, 因为mina避免了输入输出buff的内存分配过程, 这个在大规模并发下, 改善是非常明显的。


选择mina吧, 相信他。

注: memcached基本是属于小数据, 你应该把tcpnoday设置下, 另外, 应该适当设置下TCP的输入输出buffer大小。 看你的测试数据如何。不过,default 8K是大了点, 可以设置成1-4K。 毕竟是小数据么。
7 楼 bachmozart 2009-02-27  
sdh5724 写道
mina 性能不好.....我没有测试过, 但是我看到的有高并发使用的例子.


我用cindy和mina 2.0-m3 分别实现过一个简单的Memcached Server,用java-memcached-client测试发现cindy 性能比mina高很多,后来自己写了个基于简单的1:M 的NIO模型的server,性能也比mina高一些

不过看过mina代码,代码风格挺好的,功能也齐全,性能原因也不排除我使用不当的因素
6 楼 bachmozart 2009-02-27  
hanjs 写道
谁知道cindy如何设置长连接的使用方式?


长连接短连接不是通过你设置的,你发送完数据不关闭session不就是长连接吗?

人家的框架是尽力做到通用,长短连接还有协议什么的都是你自己控制
5 楼 kaktos 2009-02-26  
mina的性能据我测试2.0的性能要好于grizzly1.8x

看看grizzly2.0的代码 发现和mina已经基本一样了...
4 楼 hanjs 2009-02-26  
谁知道cindy如何设置长连接的使用方式?
3 楼 longlongriver 2008-12-19  
EJOE,我用过,感觉不错!
2 楼 家常咖啡 2008-12-02  
可以试试Grizzly:
http://groups.google.com/group/glassfish_china/web/grizzlycomet?hl=zh-CN
1 楼 sdh5724 2008-12-02  
mina 性能不好.....我没有测试过, 但是我看到的有高并发使用的例子.

相关推荐

    开源nio框架cindy源码

    Cindy-3.0b1-src这个版本是Cindy框架的源代码包,对于开发者来说,了解其源码可以帮助深入理解NIO框架的设计原理和实现细节。下面将详细介绍这个框架可能包含的关键知识点: 1. **Java NIO基础**:Cindy是建立在...

    基于Java的异步IO框架 Cindy.zip

    Cindy框架就是基于Java NIO.2构建的,它提供了简单易用的API,以减少开发异步应用的复杂性。Cindy的核心设计理念是将复杂的异步I/O操作封装起来,让开发者可以专注于业务逻辑,而不是底层细节。 ### 3. Cindy的关键...

    基于Java的实例源码-异步IO框架 Cindy.zip

    2. **非阻塞I/O**:Cindy框架利用Java NIO的非阻塞特性,当数据未准备好时,调用不会阻塞线程,而是立即返回。这使得单个线程可以同时处理多个请求,提高了系统资源的利用率。 3. **Cindy框架特性**: - **事件...

    基于java的异步IO框架 Cindy.zip

    下面我们将深入探讨Java异步IO的基本概念、Cindy框架的特点以及如何使用Cindy进行实际开发。 首先,理解Java中的异步I/O。在Java标准库中,NIO(New IO)提供了一种异步I/O操作的机制。传统的Java IO基于阻塞I/O...

    java源码:异步IO框架 Cindy.rar

    4. **扩展性**:Cindy框架具有良好的模块化设计,支持插件扩展,方便添加新的功能或优化已有功能。 5. **性能优化**:Cindy在设计时充分考虑了性能优化,例如,通过NIO(New IO)库实现低级别的系统调用,减少系统...

    异步IO框架 Cindy源码

    Cindy框架可能采用了Java NIO或AIO,或者是对它们进行了封装和优化。NIO提供了选择器(Selector)、通道(Channel)和缓冲区(Buffer)等核心组件,使得多个连接可以通过一个线程进行管理,降低了线程开销。而AIO则进一步...

    NIO trick and trap .pdf

    #### 六、构建高性能NIO框架的关键 **1. 减少数据拷贝** - **ByteBuffer的选择**:根据应用场景选择合适的`ByteBuffer`类型,如使用`DirectByteBuffer`来减少数据复制。 - **ViewByteBuffer**:提供视图,允许共享...

    Cindy 3.0b1 的源码--- Mina的兄弟

    Netty、Mina、Cindy都是不错的NIO开源框架,后两者都是在Netty的基础上演化出来的。所以要学习好Java的异步通信框架,这三个都是不可多得的好材料。 本资源仅供学习和参考使用,若要进行开发,请下载相应的Jar包

    UserGuideUserGuideUserGuide

    - **优势**:相比于传统的Java IO包,Cindy框架具有更好的扩展性和性能表现,特别是在处理大量并发连接的情况下。它通过利用Java NIO中的非阻塞I/O特性和Selector机制,大大减少了系统在线程管理和调度上的开销,...

    cindy-3.0b1-bin开发包

    Cindy是一个Java异步I/O框架,提供了一个统一高效的模型,同时支持TCP、UDP以及Pipe,并能够方便的在异步和同步操作之间进行切换。目前其实现是基于Java NIO,并计划通过JNI来支持各操作系统上本身提供的异步I/O功能...

    Netty 3.0.2.GA 的源码--- Mina的兄弟

    Netty、Mina、Cindy都是不错的NIO开源框架,后两者都是在Netty的基础上演化出来的。所以要学习好Java的异步通信框架,这三个都是不可多得的好材料。 本资源仅供学习和参考使用,若要进行开发,请下载相应的Jar包。

    java开源包8

    你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...

    java开源包1

    你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...

    java开源包11

    你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...

    java开源包2

    你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...

    java开源包3

    你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...

    java开源包6

    你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...

    java开源包5

    你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...

    java开源包10

    你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...

    java开源包4

    你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...

Global site tag (gtag.js) - Google Analytics