2026/4/6 7:27:36
网站建设
项目流程
静安网站建设关键词优化seo,食品网站app建设方案,wordpress双栏,附近公司服务端的boss线程是接收请求#xff0c;work是处理对应每个连接的后续业务处理和IO操作。这块功能的处理机制源码分析如下#xff1a;
#xff08;1#xff09;首先是用boss线程进行绑定端口并注册到从boss线程取出来的NioEventLoop对象上#xff0c;然后NioEventLoop对象…服务端的boss线程是接收请求work是处理对应每个连接的后续业务处理和IO操作。这块功能的处理机制源码分析如下1首先是用boss线程进行绑定端口并注册到从boss线程取出来的NioEventLoop对象上然后NioEventLoop对象会在run方法里无限循环监听Selector的key。2如果有客户端发起连接请求了监听到连接成功或者读取事件就会调用unsafe.read()方法此时是是调用io.netty.channel.nio.AbstractNioMessageChannel.NioMessageUnsafe#read方法此类对应的会调用实现类io.netty.channel.socket.nio.NioServerSocketChannel#doReadMessages方法。3将接受到的客户端请求SocketChannel对象封装到msg消息里然后执行pipeline.fireChannelRead方法进行管道传播处理此时管道处理器里是放置了ServerBootstrapAcceptor方法来处理此管道是服务端ServerBootstrap在初始化绑定监听时加入的。4ServerBootstrapAcceptor类的channelRead方法被触发调用此方法会将接收到的客户端请求SocketChannel对象进行注册到子线程即work线程池childGroup.register(child)后续此条客户端的连接处理都有此子线程的NioEventLoop对象进行调用和处理直到连接关闭。从而实现了boss线程接受请求到转给work线程进行处理具体的业务逻辑。附加默认情况下当创建NioEventLoopGroup的时候如果不指定线程数量则线程数量默认为CPU核心数*2基本能符合常规的场景使用跟可以实际场景来进调试work线程例如CPU*3、CPU*4。同时boss线程池如果只绑定一个端口和ip一个线程就够用线程多了只是浪费资源没使用到故常规的线程池创建时可以这么定义EventLoopGroup bossGroup new NioEventLoopGroup(1); EventLoopGroup workGroup new NioEventLoopGroup();