听到有人说过MINA中ioBuffer比Netty中的bytebuff好用,MINA多简单啊,直接就可以使用,Netty中要经过上下文的ctx.alloc出来,这点我是不太认同的。至于游戏开发的网络层是打算本身写,仍是用现成的网络框架其实仁者见仁智者见智!这个并不作什么讨论。网络
对于两个框架的比较并不谈过于深刻的,只是一个表层抽象之间的逻辑区分形成的差异,以及从这点来看Netty是比MINA有优点的。框架
咱们能够类比的看一下MINA的上层抽象逻辑,实际上是将IO(input和output)作了统一的抽象,IOHandler,IOSession,IOFilter,IOBuffer等等函数
然而Netty在上层抽象的逻辑显然和MINA有了区别,他是将IO分开来进行抽象的,inputstream,outputstream流的区别,根据上下文关系来确立bytebuff的所属关系和逻辑用意,而且提供了逐层传递基于类的传递通道。组件化
MINA的抽象模型,当然简单很容易上手,可是存在着上层逻辑使用的不便利,主要仍是在IO的处理方式不一样所形成的。举几个场景接口
一、IO的包解析规则并不同的时候游戏
二、当逻辑层须要对消息进行注册的时候,要区分包是发送仍是接受的外层封装游戏开发
三、IO的过滤策略不一致的时候开发
可能本人水平有限,当我拿到MINA的时候,我就得作IO包的逻辑区分和封装,在类名和分包的时候就要体现出来,而且基于iobuffer的解包到上层逻辑处理,我只能在底层写好进行一体化控制。若是未来解包规则有变更,不一样的逻辑代码段须要作解包形式的区分,这种一体化的抽象并不能适应上层的需求还得本身进行封装解析。这种也有好处,咱们对于网络细节能够直观的把握,而且更贴合底层网络函数接口,排查问题是很方便的。input
可是这正是Netty的优点,二者既然都是网络层的封装框架,他的这种基于上下文的抽象就更加的有优点。由于框架自己对于IO进行的分别抽象,因此能够很方便的添加不一样的过滤器,解析规则,在交给上层时更加的天然。而不须要上层再作Send仍是Rev的区分由于有上下文的限制。除此以外Netty的框架对于各个网络的功能进行了组件化处理,不须要不导入包就是了,也更加的灵活。io