netty源码
2022-09-20 14:51:01 0 举报
netty源码
作者其他创作
大纲/内容
分析pipeline.fireChannelRead()readBuf存放是是客户端channel
init(channel)解析
doReadMessages(readBuf):1、会调用ServerSocketChannel.accept()获取一个客户端SocketChannel;2、将SocketChannel转成NioSocketChannel加入buf中,并携带属性
端口绑定和监听
执行器体现
绑定端口
关注read事件
HeadContext#read()
将NioSocketCHannel注册到workerGroup上
4
一个children就是一个线程每个线程会绑定selector
初始化启动器,进行属性的绑定工作。
NioServerSocketChannel#doBind()
channelRead()读到的应该是一个完成的业务数据,而channelReadComplete()是不再由数据可读时调用。
类图
成员children:NioEventLoop
进入newChild()
1
read()方法获取客户端sockerChannel
MultithreadEventExecutorGroup
这个pipeline.fireChannelRead会触发ServerSockerChannel的pipeline中所有入站的channelRead()方法
这里的channel实现类是ServerSocketChannelImpl
进入bossGroup中的NioEventLoop的run方法进行分析
2
ServerBootStrapAcceptor是一个ChannelInboundHandler所有会调用他的channelRead()方法
监听NioSocketChannel上的Read事件
这里的unsafe是NioMessageUnsafe类的对象
分析unsafe.read()
sockerChannel注册完毕后会触发NioSocketChannel中的doBeginRead()
服务端接收客户端连接
参考文献https://blog.csdn.net/wuyangyang555/article/details/122478709
3
这里绑定的channel类
创建新的NioSocketChannel
AbstractChannel#Register()
分析源码之前请先看netty工作架构图
NioEventLoop绑定了selector
ServerSocketChannel配置
EventLoopGroup bossGroup = new NioEventLoopGroup()
完成之后进入NioEventLoop的run方法的死循环中
配置new ServerBootstrap();
可以看到,在死循环中,做了两件事:1、处理selector的连接事件;2、取队列中的任务进行执行;
将ServerSockerChannel注册到Selector上
taskQueue也在这里体现。
通过构造器反射得到ServerSockerChannel
创建了nThreads个类型为EventExecutor的children
监听Accept事件
doReadMessages(readBuf)
channelread
0 条评论
下一页