作为Java程序员,netty大家应该都或多或少的接触过。netty作为一个异步事件驱动的网络框架被广泛使用。我们从netty的官网的一张图上可以看到netty有哪些特点:
netty
netty的核心能力有三点:
- 可扩展的事件模型
- 通用的通信API
- 有零拷贝能力的字节缓冲区
在这三种核心能力的基础上,扩展出了对多种协议和传输服务的支持。
当然netty的优点不仅仅如此,后面我们将会通过源码的方式来分析netty到底有哪些优势。接下来的文章已经默认了大家熟悉netty的基本使用。
这里先贴出来一段最简单的netty创建服务端的代码(摘自netty官网https://netty.io/wiki/user-guide-for-4.x.html),接下来的分析都是基于接下来的这段代码:
EventLoopGroup bossGroup = new NioEventLoopGroup(); // (1)
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap b = new ServerBootstrap(); // (2)
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class) // (3)
.childHandler(new ChannelInitializer<SocketChannel>() { // (4)
@Override
public void initChannel(SocketChannel ch) throws Exception {
ch.pipeline().addLast(new DiscardServerHandler());
}
})
.option(ChannelOption.SO_BACKLOG, 128) // (5)
.childOption(ChannelOption.SO_KEEPALIVE, true); // (6)
// Bind and start to accept incoming connections.
ChannelFuture f = b.bind(port).sync(); // (7)
// Wait until the server socket is closed.
// In this example, this does not happen, but you can do that to gracefully
// shut down your server.
f.channel().closeFuture().sync();
} finally {
workerGroup.shutdownGracefully();
bossGroup.shutdownGracefully();
}
接下来的源码分析是基于netty的4.1.39.Final版本。
网友评论