Netty和MINA之间的比较思考
听到有人说过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的处理方式不同所造成的。举几个场景
1、IO的包解析规则并不一样的时候
2、当逻辑层需要对消息进行注册的时候,要区分包是发送还是接受的外层封装
3、IO的过滤策略不一致的时候
可能本人水平有限,当我拿到MINA的时候,我就得做IO包的逻辑区分和封装,在类名和分包的时候就要体现出来,并且基于iobuffer的解包到上层逻辑处理,我只能在底层写好进行一体化控制。如果将来解包规则有变动,不同的逻辑代码段需要做解包形式的区分,这种一体化的抽象并不能适应上层的需求还得自己进行封装解析。这种也有好处,我们对于网络细节可以直观的把握,并且更贴合底层网络函数接口,排查问题是很方便的。
但是这正是Netty的优势,两者既然都是网络层的封装框架,他的这种基于上下文的抽象就更加的有优势。因为框架本身对于IO进行的分别抽象,所以可以很方便的添加不同的过滤器,解析规则,在交给上层时更加的自然。而不需要上层再做Send还是Rev的区分因为有上下文的限制。除此之外Netty的框架对于各个网络的功能进行了组件化处理,不需要不导入包就是了,也更加的灵活。