开篇:为什么不直接用 Java NIO?
Java 从 1.4 就引入了 NIO,提供了 Channel、Buffer、Selector 这套非阻塞 IO 的 API。但如果你真正用原生 NIO 写过网络程序,一定会有以下痛苦体验:
- API 难用:ByteBuffer 读写共用一个 position,每次读写都要 flip,忘了就出 bug。
- Epoll 空轮询 bug:JDK 的 Selector 在某些 Linux 内核上会出现 CPU 100% 的空转问题。
- TCP 粘包/拆包:需要自己处理消息边界,手写半包解码器。
- 线程模型复杂:要自己管理线程池、事件分发、异常处理。
大约 14 分钟