首页 > 其他分享 >Netty ChannelHandler的生命周期

Netty ChannelHandler的生命周期

时间:2024-05-22 11:41:13浏览次数:23  
标签:Netty 生命周期 ChannelHandler ChannelHandlerContext void ctx 线程 println public

ChannelHandler方法的执行是有顺序的,而这个执行顺序可以被称为ChannelHandler的生命周期。

 

LifeCyCleTestHandler

import io.netty.channel.ChannelInboundHandlerAdapter;

import io.netty.channel.ChannelHandlerContext;

public class LifeCyCleTestHandler extends ChannelInboundHandlerAdapter {

    // handlerAdded():指当检测到新连接之后,调用ch.pipeline().addLast(new LifeCyCleTestHandler());之后的回调,
    // 表示在当前Channel中,已经成功添加了一个Handler处理器。
    @Override
    public void handlerAdded(ChannelHandlerContext ctx) throws Exception {
        System.out.println("逻辑处理器被添加: handlerAdded()");
        super.handlerAdded(ctx);
    }

    // channelRegistered():这个回调方法表示当前Channel的所有逻辑处理已经和某个NIO线程建立了绑定关系,
    // 接收新的连接,然后创建一个线程来处理这个连接的读写,只不过在Netty里使用了线程池的方式,只需要从线程池里去抓一个线程绑定在这个Channel上即可。
    // 这里的NIO线程通常指NioEventLoop。
    @Override
    public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
        System.out.println("channel绑定到线程(NioEventLoop): channelRegistered()");
        super.channelRegistered(ctx);
    }

    // channelActive():当Channel的所有业务逻辑链准备完毕(即Channel的Pipeline中已经添加完所有的Handler),
    // 以及绑定好一个NIO线程之后,这个连接才真正被激活,接下来就会回调到此方法。
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        System.out.println("channel准备就绪: channelActive()");
        super.channelActive(ctx);
    }

    // channelRead():客户端向服务端发送数据,每次都会回调此方法,表示有数据可读。
    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        System.out.println("channel有数据可读: channelRead()");
        super.channelRead(ctx, msg);
    }

    // channelReadComplete():服务端每读完一次完整的数据,都回调该方法,表示数据读取完毕。
    @Override
    public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
        System.out.println("channel某次数据读完: channelReadComplete()");
        super.channelReadComplete(ctx);
    }

    // channelInactive():表面上这个连接已经被关闭了,这个连接在TCP层面已经不再是ESTABLISH状态了。
    @Override
    public void channelInactive(ChannelHandlerContext ctx) throws Exception {
        System.out.println("channel被关闭: channelInactive()");
        super.channelInactive(ctx);
    }

    // channelUnregistered():既然连接已经被关闭,那么与这个连接绑定的线程就不需要对这个连接负责了。这个回调表明与这个连接对应的NIO线程移除了对这个连接的处理。
    @Override
    public void channelUnregistered(ChannelHandlerContext ctx) throws Exception {
        System.out.println("channel取消线程(NioEventLoop)的绑定: channelUnregistered()");
        super.channelUnregistered(ctx);
    }

    // handlerRemoved():我们给这个连接添加的所有业务逻辑处理器都被移除。
    @Override
    public void handlerRemoved(ChannelHandlerContext ctx) throws Exception {
        System.out.println("逻辑处理器被移除: handlerRemoved()");
        super.handlerRemoved(ctx);
    }

}

  

 

标签:Netty,生命周期,ChannelHandler,ChannelHandlerContext,void,ctx,线程,println,public
From: https://www.cnblogs.com/ooo0/p/18205896

相关文章

  • Netty 客户端与服务端收发消息demo
    客户端与服务端收发消息,要实现的具体功能是:在控制台输入一条消息之后按回车键,校验完客户端的登录状态之后,把消息发送到服务端;服务端收到消息之后打印,并向客户端发送一条消息,客户端收到消息之后打印。 客户端NettyClientimportcom.xc.xcspringboot.x_netty.client.handler.*;......
  • netty 最简demo
    Netty是什么Netty到底是何方神圣?用一句简单的话来说就是:Netty封装了JDK的NIO,让你用得更方便,不用再写一大堆复杂的代码了。用官方正式的话来说就是:Netty是一个异步事件驱动的网络应用框架,用于快速开发可维护的高性能服务端和客户端。使用Netty而不使用JDK原生NIO的原因1.使用J......
  • 项目管理生命周期的5个阶段
    项目管理是一个复杂的过程,涉及多个阶段,每个阶段都有其特定的目标、任务和交付成果。了解这些阶段对于确保项目成功至关重要。本文将根据提供的资料,详细介绍项目管理生命周期的五个阶段:启动、规划、执行、监控和控制以及关闭。项目启动阶段项目启动是项目管理生命周期的第一步。......
  • java netty 实现 websocket 服务端和客户端双向通信 实现心跳和断线重连 完整示例
    javanetty实现websocket服务端和客户端双向通信实现心跳和断线重连完整示例maven依赖<dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.97.Final</version></dependency>服务端一个接口IGet......
  • 【vue3入门】-【22】 组件生命周期
    组件生命周期每个Vue组件实例在创建是都需要经历一系列的初始化步骤,比如设置好数据侦听,编译模版,挂载实例到DOM,以及在数据改变时更新DOM。在此过程中,它也会运行被称为生命周期钩子的函数,让开发者有机会在特定阶段运行自己的代码。生命周期函数都是会自己执行app.vue<template>......
  • 生命周期---Vue2&Vue3
    生命周期---Vue2&Vue3简单理解为:组件从创建到被销毁的一个过程,就相当于人的一生,从出生到死亡的一个过程。组件的生命周期也称生命周期、生命周期函数、生命周期钩子生命周期在特定的时刻会调用特定的函数生命周期分为四个阶段,每个阶段都有两个钩子,现只讨论这八个钩子V......
  • 一文学会 Kubernetes Pod 的生命周期管理(转载)
    收获了解Pod的状态(Status)了解pod阶段(Phase)了解Podconditions了解容器状态(Status)保持容器健康了解容器自动重启使用探活(liveness)探针(Probe)检查容器的健康状况如果程序启动缓慢,请使用startupprobeLivenessprobe一些建议在容器启动和关闭时......
  • Spring bean的生命周期
    Spring的bean的生命周期通过BeanDefinition获取bean的定义信息。调用构造函数实例化bean。bean的依赖注入。@Autowired或者@Value的set方法。处理Aware接囗(BeanNameAware、BeanFactoryAware、ApplicationContextAware)Bean的后置处理器BeanPostProcessor-前置。初始化方......
  • sqlSession相关的作用域和生命周期
    生命周期和作用域是十分重要的,错误的使用会导致非常严重的并发问题。Mybatis的执行流程详细讲解SqlSessionFactoryBuilder:一旦创建了SqlSessionFactory,就不需要它了,比较适合在局部变量中创建。SqlSessionFactory:相当于数据库的连接池;SqlSessionFactory一旦被创建就应......
  • 私域流量优化:如何利用 AIPL 模型洞察客户生命周期价值
    在当今这个数字化时代,商业战场的硝烟从未如此浓烈。随着互联网红利的逐渐消退,公域流量的成本水涨船高,企业间对于有限用户资源的争夺已进入白热化阶段。每一次点击、每一个曝光背后,都是企业不得不承担的高昂代价。在此背景下,传统的依赖公域流量获取新客的模式正遭受前所未有的挑战,......