Netty源码剖析-关闭服务】的更多相关文章

参考文献:极客时间傅健老师的<Netty源码剖析与实战>Talk is cheap.show me the code! ----主线:  ----源码: 先在服务端加个断点和修改下代码:如图: 然后启动server和client;然后跳过bossGroup到workerGroup;进入workerGroup的关闭:在此之前呢,先在NioEventLoop里面的关闭处打个断点: 然后跟进来看看closeAll(); 这里selectAgain();目的是为了去除canceled的key,接下来的…
参考文献:极客时间傅健老师的<Netty源码剖析与实战>Talk is cheap.show me the code! --1主线分两步: 一:首先在our thread里,如果写在main方法中则就是main thread; ①:创建selector; ②:创建server socket channel; ③:初始化server socket channel; ④:给server socket channel 从boss  group中选择一个NioEventLoop; 二:boss thr…
参考文献:极客时间傅健老师的<Netty源码剖析与实战>Talk is cheap.show me the code! ----主线: ----源码: 在NioEventLoop的unsafe.read()打断点 在客户端关闭的地方也加个断点,并且修改点代码: 然后启动server和client;就会发现代码停在关闭的地方: 当下一步的时候,则会来到最开始的断点: 这个时候的unsafe就是NioSocketChannel,继续跟进并在下图的“doReadBytes()”打个断点: 继续跟进:…
参考文献:极客时间傅健老师的<Netty源码剖析与实战>Talk is cheap.show me the code! 开始之前先介绍下Netty写数据的三种方式: ①:write:写到一个buffer,flush:把buffer里的数据发送出去 ②:writeAndFlush:写到buffer,立马发送 ③:write和flush之间有个ChannelOutboundBuffer 可以用生活中快递场景来类比下: write相当于揽收到仓库,flush相当于从仓库发货,writeAndFlus…
参考文献:极客时间傅健老师的<Netty源码剖析与实战>Talk is cheap.show me the code! ----主线:worker thread 触发pipeline.fireChannelRead(byteBuf)把读取到的数据传播出去 ----源码解释: 还和之前一样,在NioEventLoop里面加断点: 然后启动服务端和客户端:效果图: 然后跟进read():由于步骤和之前的源码差不多,所以这次只挑重点: 这个就是业务处理的入口,所以跟进去看看即可: 这个head表示从…
参考文献:极客时间傅健老师的<Netty源码剖析与实战>Talk is cheap.show me the code! ----主线:worker thread ①多路复用器(Selector)接受到OP_READ事件 ②处理OP_READ事件:NioSocketChannel.NioSocketChannelUnsafe.read(); -1分配一个初始1024字节的byte buffer来接受数据 -2从Channel接受数据到byte buffer -3记录实际接受数据大小,调整下次分配…
参考文献:极客时间傅健老师的<Netty源码剖析与实战>Talk is cheap.show me the code! ----主线: 和启动一样也是有两个线程完成的,boss thread 和 worker thread; boss thread: ①NioEventLoop中的selector轮询创建连接事件(OP_ACCEPT) ②创建socket channel ③初始化socket channel 并从 worker group 中选择一个NioEventLoop worker th…
前言 在 Netty 源码剖析之 unSafe.read 方法 一文中,我们研究了 read 方法的实现,这是读取内容到容器,再看看 Netty 是如何将内容从容器输出 Channel 的吧. 1. ctx.writeAndFlush 方法 当我们调用此方法时,会从当前节点找上一个 outbound 节点,进行,并调用下个节点的 write 方法.具体看代码: @1 public ChannelFuture writeAndFlush(Object msg) { return writeAndF…
1.Netty启动源码剖析 启动类: public class NettyNioServer { public static void main(String[] args) throws Exception { /** *创建两个线程组bossGroup和workGroup,bossGroup负责处理请求连接,workGroup负责数据的处理 *两个都是无线循环 *调用可构造方法,默认的字线程数NioEventLoopGroup是实际cpu核数*2 */ EventLoopGroup boss…
一.首先来看一段服务端的示例代码: public class NettyTestServer { public void bind(int port) throws Exception{ EventLoopGroup bossgroup = new NioEventLoopGroup();//创建BOSS线程组 EventLoopGroup workgroup = new NioEventLoopGroup();//创建WORK线程组 try{ ServerBootstrap b = new S…