zoukankan      html  css  js  c++  java
  • 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的框架对于各个网络的功能进行了组件化处理,不需要不导入包就是了,也更加的灵活。

  • 相关阅读:
    如何解决移动端滚动穿透问题
    如何在mac中通过命令行使用sublime
    正向代理和反向代理
    UTF8、UTF16、UTF16-LE、UTF16-BE、UTF32都是些什么?
    依赖的版本
    如何移除inline-block元素之间的空白
    如何用JavaScript重定向到另一个网页?
    [读书笔记] 高性能网站建设指南
    java使用jconsole查看java程序运行(jmx原理)
    oracle相关知识点
  • 原文地址:https://www.cnblogs.com/flashbird/p/4419409.html
Copyright © 2011-2022 走看看