采用nio:同步非阻塞的io模型
bio: 处理多个客户端请求时,每个客户端连接需要一个独立的线程来处理 I/O 操作,会大量消耗资源
nio组成: buffer ,selector,channel
nio采用selector,监听socket channel 上是否有读写操作的事件,然后才执行读写
netty核心组件
bytebuf:网络传输使用的字节容器
channel(管道),channelPipeline
EventLoop(事件循环)
EventLoopGroup(事件循环组)
工作流程如图
details:
bootstrap,server bootstrap 对应client和server的启动类:
ServerBootstrap
:- 需要两个线程组( boss group 和 worker group , 对应 接收连接和IO处理
- 监听一个端口
Bootstrap
- 连接server主机和端口
channel:
网络接口的抽象,进行io操作,
NioServerSocketChannel , NioSocketChannel
EventLoop:
监听网络事件,调用处理器进行IO处理
可以绑定多个channel,⚠️是单线程操作
channelpipeline:
是channel的一部分(1 : 1),pipeline中包含多个channelHandler , 呈现一个链表形状,通过 handlercontext管理
channelfuture: 异步操作的结果,implements future<T>
ChannelFuture future = channel.writeAndFlush(message); future.addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture f) throws Exception { if (f.isSuccess()) { System.out.println("Message sent successfully!"); } else { System.err.println("Failed to send message: " + f.cause()); } } });
标签:netty,nio,记录,server,future,监听,channel From: https://www.cnblogs.com/towboa/p/18446530