Java NIO 和 Netty 的关系可以简单理解为:Netty 是基于 Java NIO 封装和增强的网络通信框架。
下面从几个层次来说明它们之间的关系。
Java NIO(New I/O,从 JDK 1.4 开始)是 Java 提供的一套非阻塞 I/O API,核心包括:
特点:
但 Java NIO 的问题是:
Netty 是一个高性能、异步事件驱动的网络应用框架,底层基于 Java NIO(也可以切换为其他 I/O 模型)。
Netty 解决的是:
“用 Java NIO 写网络程序太难、太容易出错”
NioEventLoop、NioSocketChannel、NioServerSocketChannelSelector + Channel + Buffer 的封装例如:
NioEventLoopGroup bossGroup = new NioEventLoopGroup();
底层就是在用 Java NIO 的 Selector。
| Java NIO | Netty 增强 |
|---|---|
| 直接使用 Selector | Reactor 线程模型 |
| 手动处理 ByteBuffer | ByteBuf(更安全、易用) |
| 自己处理拆包 | 内置 Codec(HTTP、Protobuf 等) |
| 单线程模型需自己设计 | 多线程、主从 Reactor |
| 错误处理复杂 | 统一异常传播机制 |
使用 Java NIO 写服务器大概要:
使用 Netty 只需:
ServerBootstrap bootstrap = new ServerBootstrap();
bootstrap.group(boss, worker)
.channel(NioServerSocketChannel.class)
.childHandler(new ChannelInitializer<SocketChannel>() {
protected void initChannel(SocketChannel ch) {
ch.pipeline().addLast(new StringDecoder());
ch.pipeline().addLast(new MyHandler());
}
});
而是:
Java NIO 是“发动机”
Netty 是“整车系统”
Netty 是构建在 Java NIO 之上的高层网络框架,它屏蔽了 NIO 的复杂性,并提供了更好的性能、稳定性和开发效率。
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。