源码
2022-10-12 18:01:34 0 举报
netty源码
作者其他创作
大纲/内容
pipeline.invokeHandlerAddedIfNeeded()
processSelectedKeys()
selector.select(timeoutMillis)
channel注册时候调用,调用玩后删除该handler
ServerBootstrap.init(channel);
config().group().register(channel)
doStartThread()
初始化channel,并将channel感兴趣的事件设置为OP_ACCEPT
初始化NioServerSocketChannel对java中ServerSocketChannel的包装
public NioServerSocketChannel() { this(newSocket(DEFAULT_SELECTOR_PROVIDER)); }
bossGroup
for循环处理selectedKeys里面的所有key
runAllTasks()
HeadContext
配置channel非阻塞
死循环执行
addTask(task)
channel.pipeline()
死循环执行监听I/O事件
OP_READ|OP_ACCEPT
AbstractUnsafe.this.register0(promise)
task
pipeline
运行异步队列里面的任务
select(this.wakenUp.getAndSet(false))
initChannel(ch)
pipeline.fireChannelRegistered()
ServerBootstrap
bind(9999)
eventLoop.execute(new Runnable() { public void run() { AbstractUnsafe.this.register0(promise); } });
startThread()
从bossGroup拿一个线程来处理channel的注册,将其注册在自己线程的selector上
将task线程放入taskQueue中,等待执行
(Runnable)taskQueue.poll()
当timeoutMillis超时或有事件发生时,会break
TailContext
初始化ServerSocketChannel的pipeline
initAndRegister
ServerBootstrapAcceptor
NioServerSocketChannel的无参构造方法
NioEventLoop.run()
调用pipeline里面的每一个headler的channelRegister方法
processSelectedKeysOptimized()
ServerSocketChannel newSocket(SelectorProvider provider) { try { return provider.openServerSocketChannel(); } catch (IOException var2) { throw new ChannelException(\"Failed to open a server socket.\
AbstractChannel.this.doRegister()
ch.configureBlocking(false);
当channel注册是会调用
SingleThreadEventExecutor.this.run()
ChannelInitializer
绑定网络监听端口
taskQueue.offer(task)
调用pipeline里面的每一个headler的HandlerAdded方法
workerGroup
NioServerSocketChannel
super(parent);
channelFactory.newChannel()
newChannelPipeline()
runAllTasksFrom(this.taskQueue)
把Serverchannel绑定到网络端口上
unsafe.read();
注册channel到selector上
0 条评论
下一页