netty源码流程图
2021-12-30 17:30:25 0 举报
netty源码流程图
作者其他创作
大纲/内容
pipeline
WorkerGroup
head
反射调用NioServerSocketChannel无参构造方法
tail
config().group().register(channel)
ServerBootstrapAcceptor
ChannelInitializer
selectKeys = selector.select(timeoutMillis)
BossGroup
有Channel注册时会回调
nettyServerHandler
NioEventLoop.run()
NIO代码 0代表accpet事件注册到Selector上
从bossGroup里拿一个线程来处理注册,注册到线程自己的Selector里
channelFactory.newChannel()
将Accept事件的int值赋值,还没有注册到Selecto上 ch.configureBlocking(false);
OP_READ
initChannel(ch)
对比NIO代码
doBind()
ServerSokcetChannelpipeline
initAndRegistry
taskqueue.offer()
processKeys()
newChannelPipeline()
ServerBootStrap
和ServerSocketChannel注册逻辑一样注册到workGroup的某个eventLoop的Selector里
this(newSocket(DEFAULT_SELECTOR_PROVIDER))
ServerBootstrapAcceptor.ChannelRead child.pipeline().addLast(childHandler);
自己写的业务handler
我们自己写的handler
Client
startThread()
调用Pipeline里的handle处理
doBind0()通过操作系统绑定端口
OP_ACCEPT
pipeline p = channel.pipeline()
runAllTasks();
pipeline.invokeHandlerAddedIfNeeded();
SingleThreadEventExecutor.this.run();
unsafe.read()
ServerSocketChannel = provider.openServerSocketChannel()
selector.select()
eventLoop.execute(()—>{register0(promise)})
newChannelPipeline();
加入到一个任务队列里执行
doReadMessages(readBuf)
SocketChannel ch = SocketUtils.accept(javaChannel());
init(channel)
unsafe.read();
childGroup.register(child)
封装成SocketChannel
processSelectedKeys();
pipeline.fireChannelRead(readBuf.get(i));
bind(9000)
p.add(ServerBootstrapAcceptor)
收藏
0 条评论
下一页