netty
文章平均质量分 88
我还没秃,还能学
这个作者很懒,什么都没留下…
展开
-
netty源码解析之编码和解码
概述关于客户端读取数据的核心是 unsafe 的read()方法,对于客户端的unsafe而言 其具体的实现类是NioByteUnsaferead()public final void read() { final ChannelConfig config = config(); if (shouldBreakReadReady(config)) { clearReadPending();原创 2020-12-02 21:19:52 · 319 阅读 · 0 评论 -
netty源码解析---selector.run() (2)
概述本文是对《netty源码解析—selector.run()》一文的后续补充,在《netty源码解析—selector.run()》分析完成了switch部分,那么接下来开始分析netty 的事件轮询部分,以及后续processSelectedKeys(处理完switch部分,就开始进行事件轮询的,核心的方法就是 processSelectedKeys() private void processSelectedKeys() { if (selectedKeys != nul原创 2020-11-24 17:44:37 · 166 阅读 · 0 评论 -
netty源码解析---selector.run()
概述本文将对netty的选择器的工作原理进行解析run()直接步入正题!!!protected void run() { for (;;) { try { try { switch (selectStrategy.calculateStrategy(selectNowSupplier, hasTasks())) { case SelectStrate原创 2020-11-23 18:48:13 · 162 阅读 · 0 评论 -
netty之wakeup详解
有关wakeup变量的使用有一下几个地方(这里只使用netty普通任务举例,不讨论定时任务)部分1,NioEventLoop.select() if (hasTasks() && wakenUp.compareAndSet(false, true)) { selector.selectNow(); selectCnt = 1; break;原创 2020-11-23 18:11:14 · 914 阅读 · 3 评论 -
netty源码解析---bind()(4)---dobind0()
概述接着笔者的上一篇博客《netty源码解析—bind()(3)—register0()》,在完成register0()的调用之后,又会回到doBind()方法继续执行,到目前位置bossGroup的selector 还没有对任何事件感兴趣,也没有为服务端进行任何ip以及端口的绑定dobind0()private static void doBind0( final ChannelFuture regFuture, final Channel channel,原创 2020-11-22 15:34:03 · 302 阅读 · 0 评论 -
netty源码解析---bind()(3)---register0()
概述在netty的bind方法里,经过 channel(NioServerSocketChannel) 的实例化后初始化后,开始向pipeline里添加 handler,然后还会调用register向 bossGroup 里面注册 channel(NioServerSocketChannel),但是这里只会先将这个register0 方法作为一个任务放入任务队列中,然后就会开启reactor ,接着这个线程就会开始执行之前的任务队列,就会执行register0register0()private vo原创 2020-11-20 17:56:19 · 464 阅读 · 0 评论 -
netty源码解析---bind()(2)
概述《netty源码解析—bind()》一文的细节补充init().addLast()当netty获取到channel后,会向channel的pipeline 里面添加ChannelInitializer 这个handler追溯到addLast()方法的最底层public final ChannelPipeline addLast(EventExecutorGroup group, String name, ChannelHandler handler) { //group=nul原创 2020-11-20 14:56:54 · 113 阅读 · 0 评论 -
netty源码解析---bind()
概述bind()方法用于用于进行端口号的绑定bind() public ChannelFuture bind(int inetPort) { return bind(new InetSocketAddress(inetPort)); }new InetSocketAddress(inetPort) 里面会将本机的ip和传入的端口封装为InetSocketAddress对象深挖进入dobind()private ChannelFuture doBind(final SocketAdd原创 2020-11-18 19:13:42 · 549 阅读 · 0 评论 -
netty源码解析---bossGroup初始化
概述本文主要讲述netty bossGroup初始化相关流程初始化bossGroup实际类型是,NioEventLoopGroup,即然探究初始化流程,那么直接进入构造方法 public NioEventLoopGroup(int nThreads, Executor executor, final SelectorProvider selectorProvider, final SelectStrategyFactory select原创 2020-11-17 21:28:16 · 351 阅读 · 1 评论