zoukankan      html  css  js  c++  java
  • Netty初探

    匠心零度 转载请注明原创出处,谢谢!

    说在前面

    为什么我们需要学习netty?谈谈自己的看法,由于本人水平有限,如果有那里不对,希望各位大佬积极指出,欢迎在留言区进行评论交流、探讨。

    由于移动互联网的爆发性的增长,带来了很多机遇与挑战,其中一项就是把有些http协议调用修改为基于TCP自定义协议方式的长连接调用了,让我想起来了一句话:天下武功无坚不破 唯快不破。,所有的出发点都是为了快,并且现在很多互联网上面的项目比如Dubbo、Hadoop系列,MQ等都在使用netty了,如果没有使用到这些使用netty的产品,需要实现通信使用socket的确也可以,但是实现复杂容易有bug。

    主题

    • 为什么需要学习netty?
    • netty简介。
    • 我打算如何学习。

    为什么需要学习netty?

    说说netty之前,我们先看看使用jdk原生nio编程的一些问题:

    • NIO的类库和API繁杂,使用麻烦,你需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。
    • 需要具备其他的额外技能做铺垫,例如熟悉Java多线程编程。这是因为NIO编程涉及到Reactor模式,你必须对多线程和网路编程非常熟悉,才能编写出高质量的NIO程序。
    • 可靠性能力补齐,工作量和难度都非常大。例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常码流的处理等问题,NIO编程的特点是功能开发相对容易,但是可靠性能力补齐的工作量和难度都非常大。
    • JDK NIO的BUG,例如臭名昭著的epoll bug,它会导致Selector空轮询,最终导致CPU 100%。官方声称在JDK 1.6版本的update18修复了该问题,但是直到JDK 1.7版本该问题仍旧存在,只不过该BUG发生概率降低了一些而已,它并没有得到根本性解决。

    netty是一个优秀的框架,为什么我们还要学习呢?

    • 你只有熟悉才可以更好的使用。
    • 你不想看看为什么netty这么优秀的? 怎么解决一些原生nio的问题的?
    • 方便日后的维护、扩展、定制等。
    • 如何考虑提高并发性能,如何把线程玩转的?
      等等。

    netty简介

    Netty是业界最流行的NIO框架之一,它的健壮性、功能、性能、可定制性和可扩展性在同类框架中都是首屈一指的,它已经得到成百上千的商用项目验证,例如Hadoop的RPC框架Avro就使用了Netty作为底层通信框架,其他还有业界主流的RPC框架,也使用Netty来构建高性能的异步通信能力。

    通过对Netty的分析,我们将它的优点总结如下。

    • API使用简单,开发门槛低;
    • 功能强大,预置了多种编解码功能,支持多种主流协议;
    • 定制能力强,可以通过ChannelHandler对通信框架进行灵活地扩展;
    • 性能高,通过与其他业界主流的NIO框架对比,Netty的综合性能最优;
    • 成熟、稳定,Netty修复了已经发现的所有JDK NIO BUG,业务开发人员不需要再为NIO的BUG而烦恼;
    • 社区活跃,版本迭代周期短,发现的BUG可以被及时修复,同时,更多的新功能会加入;
    • 经历了大规模的商业应用考验,质量得到验证。Netty在互联网、大数据、网络游戏、企业应用、电信软件等众多行业已经得到了成功商用,证明它已经完全能够满足不同行业的商业应用了。

    正是因为这些优点,Netty逐渐成为了Java NIO编程的首选框架。

    我打算如何学习

    由于上面说的一些原因,自己也准备学习下netty,我准备从以下几方面进行学习,后续在慢慢在文章里面展开怎么学习。

    • Netty权威指南(买了本书准备系统学习下,目前真正看……)。
    • 看牛逼人物的netty博客(比如我狼哥netty系列博客)。
    • 准备基于netty4.x系列源码看看。

    结束语

    上面的一些都是零度准备学习netty的一些思考和理解,如果有那里不对欢迎留言区进行留言讨论。


    如果读完觉得有收获的话,欢迎点赞、关注、加公众号【匠心零度】,查阅更多精彩历史!!!

  • 相关阅读:
    程序崩溃访问非法内存
    C# IP转换,时间转换
    _heap_alloc_dbg 崩溃
    TaskIcon 系统任务栏图标
    zlib 压缩使用
    桌面清理工具
    CMMI知识库(精简版)
    JAVA程序员面试题集合
    OracleDECODE用法
    Oracle索引重建
  • 原文地址:https://www.cnblogs.com/jiangxinlingdu/p/8400436.html
Copyright © 2011-2022 走看看