Netty 框架的特点

Netty 的一个特点就是入门相对比较容易,但是真正掌握并精通是非常困难的,原因有如下几个:

  • 1.涉及的知识面比较广:Netty 作为一个高性能的 NIO 通信框架,涉及到的知识点包括网络通信、多线程编程、序列化和反序列化、异步和同步编程模型、SSL/TLS 安全、内存池、HTTP、MQTT 等各种协议栈,这些知识点在 Java 语言中本身就是难点和重点,如果对这些基础知识掌握不扎实,是很难真正掌握好 Netty 的。
  • 2.调试比较困难:因为大量使用异步编程接口,以及消息处理过程中的各种线程切换,相比于传统同步代码,调试难度比较大。
  • 3.类继承层次比较深,有些代码很晦涩(例如内存池、Reactor 线程模型等),对于初学者而言,通过阅读代码来掌握 Netty 难度还是比较大的。
  • 4.代码规模庞大:目前,Netty 的代码规模已经非常庞大,特别是协议栈部分,提供了对 HTTP/2、MQTT、WebSocket、SMTP 等多种协议的支持,相关代码非常多。如果学习方式不当,抓不住重点,全量阅读 Netty 源码,既耗时又很难吃透,很容易半途而废。
  • 5.资料比较零散,缺乏实践相关的案例:网上各种 Netty 的资料非常多,但是以理论讲解为主,Netty 在各行业中的应用、问题定位技巧以及案例实践方面的资料很少,缺乏系统性的实践总结,也是 Netty 学习的一大痛点。

初学者常见问题

对于很多初学者,在学习过程中经常会遇到如下几个问题:

  • 1.相关领域知识的储备不足:想了解学习 Netty 需要储备哪些技能,掌握哪些知识点,有什么学习技巧可以更快的掌握 Netty。由于对 Java 多线程编程、Socket 通信、TCP/IP 协议栈等知识掌握不扎实,后续在学习 Netty 的过程中会遇到很多困难。
  • 2.理论学习完,实践遇到难题:学习完理论知识之后,想在实际项目中使用,但是真正跟具体项目结合在一起解决实际问题时,又感觉比较棘手,不知道自己使用的方式是否最优,希望能够多学一些案例实践方面的知识,以便更好的在业务中使用 Netty。
  • 3.出了问题不会定位:在项目中遇到了问题,但是由于对 Netty 底层细节掌握不扎实,无法有效的定位并解决问题,只能靠网上搜索相关案例来参考,问题解决效率比较低,甚至束手无策。