NioServerSocketChannel中pipeline的read和write问题

来源:6-2 pipeline初始化

慕仙2255957

2019-06-22

1、下面的SeverHandler是添加到创建NioServerSocketChannel时创建的pipeline中,它的读写机制是怎么实现的呢??

2、截图二中的channelRead方法在客户端连接过来后被调用,它是在哪里注册的read事件的??

3、截图二中的ctx.channel().write()有什么意义?? , 因为这个SeverHandler是在创建NioServerSocketChannel时创建的pipeline中,它应该不能写到客户端吧???


http://img.mukewang.com/szimg/5d0d9dc500014bd608320313.jpg


http://img.mukewang.com/szimg/5d0d9ecf0001f4b810400743.jpg

写回答

1回答

闪电侠

2019-06-23

1、下面的SeverHandler是添加到创建NioServerSocketChannel时创建的pipeline中,它的读写机制是怎么实现的呢??

对于 NioServerSocketChannel,可以理解为只有读机制,读的机制就是轮询有没有 ACCEPT 事件,有ACCEPT 事件,就创建一个 NioSocketChannel,NioServerSocketChannel 的主要作用其实就是创建一条与客户端连接的 channel,其他的可以不用管;


2. 截图二中的channelRead方法在客户端连接过来后被调用,它是在哪里注册的read事件的??

可以跟一下 NioServerSocketChannel() 的构造函数,构造的时候传递了一个 SelectionKey.OP_ACCEPT,然后再下面这个地方注册,具体注册可以在这个地方打个断点,然后通过调用链的方式追踪一下最开始调用的地方

//img.mukewang.com/szimg/5d0f09f0000107e819401370.jpg


3.这个地方是我写错了,应该是需要加到 childHandler 中,感谢指正!

0
1
慕仙2255957
非常感谢!
2019-06-23
共1条回复

Java读源码之Netty深入剖析

解析netty各大组件细节,百万级性能调优,设计模式实际运用

2334 学习 · 283 问题

查看课程