netty简介:
Netty是基于Java NIO client-server的网络应用框架,使用Netty可以快速开发网络应用,例如服务器和客户端协议。Netty提供了一种新的方式来开发网络应用程序,这种新的方式使它很容易使用和具有很强的扩展性。Netty的内部实现是很复杂的,但是Netty提供了简单易用的API从网络处理代码中解耦业务逻辑。Netty是完全基于NIO实现的,所以整个Netty都是异步的。
网络应用程序通常需要有较高的可扩展性,无论是Netty还是其他的基于Java Nio的框架,都会提供可扩展性的解决方案。Netty中一个关键组成部分是它的异步特性,本片文章将讨论同步(阻塞)和异步(非阻塞)的IO来说明为什么使用异步代码解决扩展性问题以及如何使用异步。
netty原理图:
netty 编程大致步骤:
服务端代码实现:
package com.***.demo.netty2.server;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import com.***.demo.netty2.common.ObjectDecoder;
import com.***.demo.netty2.common.ObjectEncoder;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.socket.SocketChannel;
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
import io.netty.handler.codec.LengthFieldPrepender;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelFutureListener;
import io.netty.channel.ChannelHandlerAdapter;
import io.netty.channel.ChannelHandlerContext;
public class NIOServerbootstrap {
public static void main(String[] args) throws InterruptedException {
//1.创建启动引导
//netty用于启动NIO服务端的辅助启动类,目的是降低服务端的开发复杂度
ServerBootstrap sbt=new ServerBootstrap();
//2.创建两个线程池 分别处理客户端 请求或转发 / SocketChannel的网络读写
EventLoopGroup boss=new NioEventLoopGroup();
EventLoopGroup worker=new NioEventLoopGroup();
//3.关联线程池
sbt.group(boss, worker);
//4.指定Socket服务实现类
sbt.channel(NioServerSocketChannel.class);
//配置NioServerSocketChannel的TCP参数
sbt.option(ChannelOption.SO_BACKLOG, 1024);
//5.初始化通信管道 * 这块是重点,其实吧是绑定I/O事件的处理类childChannelHandler
//主要用于处理网络I/O事件,例如 记录日志、对消息编解码之类的
sbt.childHandler(new ServerChannelInitializer());
//6.绑定端口
System.out.println("我在9999 监听