采用nio:同步非阻塞的io模型
bio: 处理多个客户端请求时,每个客户端连接需要一个独立的线程来处理 I/O 操作,会大量消耗资源
nio组成: buffer ,selector,channel
nio采用selector,监听socket channel 上是否有读写操作的事件,然后才执行读写
netty核心组件
⚠️eventgroup是一个线程池,每个被创建的线程处理一个channelPipeline(channel), pipeline中有一组串起来的处理器
EventLoop(事件循环),是一个包含多个线程的集合
EventLoopGroup(事件循环组)
channel(管道),channelPipeline ( channelHandler)
工作流程如图
details:
bootstrap,server bootstrap 对应client和server的启动类:
ServerBootstrap
:- 需要两个线程组( boss group 和 worker group , 对应 接收连接和IO处理
- 监听一个端口
Bootstrap
- 连接server主机和端口
channel:
网络接口的抽象,进行io操作,
NioServerSocketChannel , NioSocketChannel
EventLoop: (其中包含selector机制)
如前所述,是一个线程池, 默认构造函数创建 线程数 【 CPU核心数*2】
监听网络事件,调用处理器进行IO处理
eventloop和thread是1:1 的, eventloop可以绑定多个channel,通过selector处理io操作
channelpipeline:
是channel的一部分(1 : 1),pipeline中包含多个channelHandler , 呈现一个链表形状,通过 handlercontext管理
bootstrap启动
无论是client还是server,都设置了线程组(nioEventLoop),线程模型(NIO) , channel 处理逻辑
一些代码
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()); } } });
大部分网络io框架采用reactor模型【事件驱动,多路复用】
boss-group用来接收连接请求,然后转发到eventgroup
netty 采用 NioEventloopgroup线程池 的线程模型
server boostrap, client就不贴了类似的
serverBootstrap.group(bossGroup, workerGroup) // 设置两个线程组 .channel(NioServerSocketChannel.class) // 指定服务端通道类型 .childHandler(new ChannelInitializer<SocketChannel>() { // 处理每一个连接的SocketChannel @Override protected void initChannel(SocketChannel ch) throws Exception { ChannelPipeline pipeline = ch.pipeline(); // 添加编码器、解码器等处理器 pipeline.addLast(new StringDecoder()); pipeline.addLast(new StringEncoder()); pipeline.addLast(new SimpleServerHandler()); // 自定义处理器 } }); // 绑定端口并启动服务器 ChannelFuture future = serverBootstrap.bind(port).sync();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2023-10-04 AT_abc291_f