介绍
netty是基于Java NIO网络提供客户端/服务端框架,它非常方便开发底层的非阻塞的网络应用。
netty拥有如下特性:
- 易用性:比Java NIO更易使用,提供针对很多使用场景的示例
- 最小化依赖:仅仅需要一个依赖即可得到整个框架
- 高性能:提供比核心Java API更高的吞吐量以及低延迟,由于内部资源池的概念使得它更容易扩展
- 安全性:提供SSL、TLS、StartTLS支持
Netty构建块
基于Java的网络应用中,核心的组成是类Socket,而Netty提供的Channel接口提供了API极大的简化了直接与Socket工作的复杂性,例如,为了与TCP/IP工作,可以使用SocketChannel。SocketChannel表示客户端与服务端的TCP连接。
接口ClientSocketChannelFactory创建SocketChannel,SocketChannel接口继承Channel接口,SocketChannel拥有SocketChannelConfig
SocketChannels是由EventLoop管理,EventLoop查询新事件,例如,来到的数据,当一个事件发生时,最终会传递到合适的Handler,例如,一个ChannelHandler
为了共享资源,例如,线程,netty分组每个EventLoop到一个EventLoopGroup。
最后,使用BootStrap类来启动Netty和其资源
示例1
我们以一个简单的Server服务为例,说明一下创建过程。
- 添加netty依赖
<dependencies>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.52.Final</version>
</dependency>
</dependencies>
- 代码
- 创建EchoServer主类
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.logging.LogLevel;
import io.netty.handler.logging.LoggingHandler;
public class EchoServer {
public static void main(String[] args) {
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
EventLoopGroup workerGroup = new NioEventLoopGroup();
EchoServerHandler echoServerHandler = new EchoServerHandler();
try {
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.handler(new LoggingHandler(LogLeve