默认
发表评论 8
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
NIO框架mina 和 netty 各有优缺点,我到底该选择哪个啊?
阅读(115985) | 评论(8 收藏4 淘帖2 1
1金币
新项目需要搭建一个纯java实现的的服务,因时间紧张决定先采用开源的框架先开发。

目前了解的有mina和netty两个框架比较符合预期,查看了资料依然不好做出决定:

  • mina比netty出现的早,都是Trustin Lee的作品;
  • mina将内核和一些特性的联系过于紧密,使得用户在不需要这些特性的时候无法脱离,相比下性能会有所下降;netty解决了这个设计问题;
  • netty的文档更清晰,很多mina的特性在netty里都有;
  • netty更新周期更短,新版本的发布比较快;
  • 它们的架构差别不大,mina靠apache生存,而netty靠jboss,和jboss的结合度非常高,netty有对google protocal buf的支持,有更完整的ioc容器支持(spring,guice,jbossmc和osgi);
  • netty比mina使用起来更简单,netty里你可以自定义的处理upstream events 或/和 downstream events,可以使用decoder和encoder来解码和编码发送内容;
  • netty和mina在处理UDP时有一些不同,netty将UDP无连接的特性暴露出来;而mina对UDP进行了高级层次的抽象,可以把UDP当成"面向连接"的协议,而要netty做到这一点比较困难。mina把TCP和UDP一样当"有连接"的处理,一个UDP请求会按照address产生一个新的 IoSession,过期时间是1分钟,这样做的好处是显然的,但是对于有性能要求的项目就不好了,对一个无连接的东西cache 1分钟,大多数时候可能是白cache了,做无用功。 Mina这样做可能还有个初衷是连续解码用的,比如一个包太大了,分了两次传输;但是这样的设计应该是udp大忌了。


So,如此凌乱,我该选哪个啊?

最佳答案

查看完整内容

个人意见仅供参考: 这两个东西没本质上的差别,哪个熟悉选哪个吧。用框架的主要目的之一是为了快速开发,这么纠结,根这个理念相悖啊,哈哈 这几篇文章你看完后,应该能做决定了:http://www.52im.net/thread-163-1-1.html、http://www.52im.net/thread-96-1-2.html 还有,貌似作者后来又从JBoss跳槽到Twitter了,真够乱的,看这篇:http://www.52im.net/thread-97-1-2.html 的最后部分里说的。
上一篇:Android端做消息推送有没有比较好的方案?下一篇:socket.io和websocket 之间是什么关系?有什么区别?

本帖已收录至以下技术专辑

推荐方案
评论 8
个人意见仅供参考:
这两个东西没本质上的差别,哪个熟悉选哪个吧。用框架的主要目的之一是为了快速开发,这么纠结,根这个理念相悖啊,哈哈
这几篇文章你看完后,应该能做决定了:http://www.52im.net/thread-163-1-1.htmlhttp://www.52im.net/thread-96-1-2.html

还有,貌似作者后来又从JBoss跳槽到Twitter了,真够乱的,看这篇:http://www.52im.net/thread-97-1-2.html 的最后部分里说的。
架构什么的都不谈了,IO框架大致都是一个思路,Assembly Line模型。
就说一点,Netty的.final版本,都是工业级的产品。
签名: 一个低级趣味的程序员。
哪个熟悉用哪个.Netty是基于线程的完全非阻塞异步模型, 强依赖于LinkedBlockingQueue. 说不定未来会有一款基于完全无锁队列(例如disruptor)的IO框架. Netty比较烦心的是需要定义Inbound,Outbound的handler, 当信道active的时候, 会先找到inbound,如果这个inbound handler里面有调用写操作或者刷新操作,则会在这个inbound处,再次查找outbound,这就要求在添加pipleline的时候要按照一定的顺序, 个人感觉这像是被强奸了一样.
Mina几乎不再更新了,Netty还在不断进化中。尽管先考虑的Mina,三年前从自己写的底层通讯服务器库切换到了Netty。这俩已经差的不是一条街了。推荐后者无疑。
二者buffer分配方式和分配算法不同,这很大程度上使mina的buffer抖动多,影响io
- mina是heapbytebuffer,每次bytebuffer.allocate去分配。同时根据『满则增大一倍,两次一半则缩减一半』
- netty是directbytebuffer,同时应该buffercache的存在,在buffersize不变的情况下,重复使用。分配大小是依赖buffersize分配表,有一套预测算法来分配。快速应对增大,而缓慢shrink
签名: IT民工/ACMilan/Sukhoi/BMW/Nikon
签名: IT民工/ACMilan/Sukhoi/BMW/Nikon
引用:LifePlayery 发表于 2016-03-22 12:49
推荐3本中文书: 《Netty 4.x 用户指南》https://github.com/waylau/netty-4-user-guide
《Netty 实战(精 ...

多谢了
引用:LifePlayery 发表于 2016-03-22 12:49
推荐3本中文书: 《Netty 4.x 用户指南》https://github.com/waylau/netty-4-user-guide
《Netty 实战(精 ...

谢谢分享支持一下
签名: Hello everyone
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部