什么是 Netty
Netty 是一个高性能的网络通信框架,封装了底层复杂的 socket 编程细节,让我们可以高效快速构建自己的应用
有哪些开源框架用了 Netty 呢?grpc、dubbo、kafka、rocketmq、zookeeper、hadoop
Netty Demo
server 端启动 netty 服务器
public static void main(String[] args) throws InterruptedException { EventLoopGroup boss = new NioEventLoopGroup(); EventLoopGroup worker = new NioEventLoopGroup(); try { ServerBootstrap serverBootstrap = new ServerBootstrap(); serverBootstrap.group(boss, worker) .channel(NioServerSocketChannel.class) // 设置接收缓冲区大小 // 控制窗口值 .childOption(ChannelOption.SO_RCVBUF, 32 * 1024) // 设置发送缓冲区大小 .childOption(ChannelOption.SO_SNDBUF, 32 * 1023) .childHandler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel ch) throws Exception { ChannelPipeline channelPipeline = ch.pipeline(); channelPipeline.addLast(new JdrpcCodec()); channelPipeline.addLast(new JdrpcServerHandler()); } }); ChannelFuture channelFuture = serverBootstrap.bind(JdrpcConstant.PORT).sync(); channelFuture.addListener(future -> { if (future.isSuccess()) { logger.info("服务启动成功,绑定端口: {}", JdrpcConstant.PORT); } else { logger.error("服务启动失败"); } }); channelFuture.channel().closeFuture().sync(); } finally { boss.shutdownGracefully(); worker.shutdownGracefully(); } }
启动 client
public static void main(String[] args) throws InterruptedException { EventLoopGroup eventLoopGroup = new NioEventLoopGroup(); Bootstrap bootstrap = new Bootstrap(); bootstrap.group(eventLoopGroup) .channel(NioSocketChannel.class) // 连接超时时间 .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000) // 保持长连接心跳 .option(ChannelOption.SO_KEEPALIVE, true) // 禁用 Nagle 算法 .option(ChannelOption.TCP_NODELAY, true) .handler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel ch) throws Exception { ch.pipeline() // 设置编码解码器 .addLast(new JdrpcCodec()) // 业务逻辑处理类 .addLast(new JdrpcClientHandler()); } }); bootstrap.connect("127.0.0.1", Jdrpc