众所周知,Netty 作为当前流行的 NIO 框架,操作省时、省事还安全,在云计算、大数据通讯,电商、游戏等领域都有广泛的应用。如果是一个大型网站,内部接口非常多的情况下,好处很明显——首先就是长链接,不用每次通信都要像 http 一样去 3 次握手什么的,减少了网络开销;其次就是其自带的注册中心、监控管理、动态扩展等,开发非常方便。然而,想要将 Netty 真正掌握并精通难度却不小。一些学习者平时只注重使用,但一到面试的时候往往卡壳:
-
Netty框架本身存在粘包半包问题?什么时候需要考虑?
-
如何实现 WebSocket 长连接?
-
服务端如何进行初始化?何时接受客户端请求?何时注册接受 Socket 并注册到对应的 EventLoop 管理的 Selector ?
-
Netty 的零拷贝如何实现?
如上,面试官一问到 Netty ,大概率会问到源码问题。如果多线程编程、Socket 通信、TCP/IP 协议栈等知识掌握不扎实,很难回答上来。即便在工作中,Netty 调用过程中遇到问题,如果不会追踪定位,效率也会很低。因此,沉下心来,抓重点的学习,才能事半功倍,攻克 Netty 。
目录
基础篇 走进Java NIO
Java的一些类库在早期设计中功能并不完善或者存在一些缺陷,其中最令人恼火的就是基于同步I/O的Socket通信类库,直到2002年2月13日JDK1.4 Merlin的发布,Java才第一次支持非阻塞I/O,这个类库的提供为JDK的通信模型带来了翻天覆地的变化。