简介
Netty™ is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients.
基本概念
Channel
代表一个到实体(硬件设备、文件、网络 Socket 等)的开放连接,如读操作或写操作
Callback
代表一个在处理完某个事件之后,被调用的方法
Future
代表一个异步操作结果的占位符
Event
代表一个可能会触发相应动作的事件连接被激活、用户事件等
ChannelHandler
代表一个响应特定事件而被执行的回调
特性
统一的 API
简单易用
高性能
健壮
安全
庞大的社区支持
架构
技术内幕
Netty 和 TCP 的关系
本质上,Netty 仍然会调用 Java 的 Socket 库(如常见的 IO、NIO 和 NIO2 等),而 Java 自身也是对操作系统 Socket 接口的封装。到了操作系统层面,Socket 仍然会走 TCP 协议。所以,可以将 Netty 理解为,是对 TCP 协议的高度封装
IdleStateHandler 和 ReadTimeoutHandler / WriteTimeoutHandler 异同
三者均是基于心跳机制来完成 socket 超时断开的,前者的功能实际上包含了后两者,IdleStateHandler 可以同时对 read / write 请求进行超时控制
EpollEventLoopGroup 和 NioEventLoopGroup 的区别
Java 中的 NIO 会根据操作系统不同,选用不同的 Selector 实现,例如 Linux 对应 EPollSelectorProvider(epoll 模式)和 PollSelectorProvider(selector 模式)、MacOS 对应 KQueueSelectorProvider、Windows 对应 WindowsSelectorProvider。由此可见,EpollEventLoopGroup 只能被应用于 Linux 环境中。其主要优势是:
使用的是边缘触发(ET,edge-triggered),而非使用水位触发(LT,level-triggered)
提供了更多的配置参数, 如 TCPCORK、SOREUSEADDR 等
通过 JNI 调用 C 代码,可以减少 GC 压力