`
lobin
  • 浏览: 417377 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Netty:ChannelInitializer

 
阅读更多

ChannelInitializer

用于初始化一个Channel,这是一个抽象类,Netty4并不提供实现。

ChannelInitializer中主要就一个initChannel方法,就是这个方法负责初始化一个Channel。这个方法有两个定义,第一个传入的是ChannelHandlerContext,这个方法会调用第二个方法。这是一个私有方法,我们不会直接调用到这个方法,这个方法在两种情况下会调用:

1、在注册Channel触发调用channelRegistered的时候会调用这个方法。

2、在注册ChannelHandler触发调用handlerAdded的时候会调用这个方法。

 

    private boolean initChannel(ChannelHandlerContext ctx) throws Exception {
        if (initMap.putIfAbsent(ctx, Boolean.TRUE) == null) { // Guard against re-entrance.
            try {
                initChannel((C) ctx.channel());
            } catch (Throwable cause) {
                // Explicitly call exceptionCaught(...) as we removed the handler before calling initChannel(...).
                // We do so to prevent multiple calls to initChannel(...).
                exceptionCaught(ctx, cause);
            } finally {
                remove(ctx);
            }
            return true;
        }
        return false;
    }

 

另一个是传入的是Channel,这是一个抽象方法,需要我们去实现。

protected abstract void initChannel(C ch) throws Exception;

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Spring Boot与Netty:构建高性能的网络应用

    import io.netty.channel.ChannelInitializer; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel...

    java-netty:netty框架例子代码

    2. **ChannelInitializer**:这个类用于初始化 Channel,在 Channel 注册到 EventLoop 之前,可以添加 ChannelHandler 到 Channel 的处理链。 3. **ChannelInboundHandlerAdapter/ChannelOutboundHandlerAdapter**...

    spring-boot-netty:使用Netty应用程序服务器的示例Spring Boot应用程序

    - 使用`ChannelInitializer`初始化管道,定义消息处理流程。 4. **Spring WebFlux与Netty**: - Spring 5引入了WebFlux,它是Spring MVC的轻量级替代,支持反应式编程模型。 - WebFlux默认可以与Netty一起使用,...

    socketio-netty:从 code.google.compsocketio-netty 自动导出

    .childHandler(new ChannelInitializer() { @Override public void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new SocketIONamespace("/")); } }); b.bind(9000).sync(); ``` ...

    Netty+设计模式

    1. **工厂模式(Factory Pattern)**:Netty的ChannelInitializer就是一个典型的工厂模式,它用于初始化ChannelPipeline,根据需求创建并添加相应的处理器。 2. **单例模式(Singleton Pattern)**:Netty的...

    springboot与netty整合

    3. **定义Netty Server**:编写一个Netty的服务器端代码,包括`ServerBootstrap`,`ChannelInitializer`,`ChannelHandler`等。例如,我们可以自定义一个`EchoServerHandler`,处理接收到的数据并回显。 4. **集成...

    基于netty实现的web框架

    Netty的ChannelInitializer会注册各种处理器(Handler)到管道(Pipeline),这些处理器用于处理进来的连接、解码HTTP请求等。 2. **HTTP处理**: Netty的HttpServerCodec用于HTTP编码和解码,HttpObjectAggregator...

    netty做服务端支持ssl协议实现websocket的wss协议(java)

    3. **自定义ChannelInitializer**:在Netty的Bootstrap中,你需要添加一个ChannelInitializer,用于初始化新的Channel。在这里,你会将SSLEngine应用到pipeline中,通常是在添加`SslHandler`时。 4. **配置...

    Netty(集成跨平台远程登录)_nettyCAS登入_netty远程登陆_

    1. **建立连接**:客户端使用 Netty 的 ChannelInitializer 配置好所需的处理器链,连接到服务器。服务器端同样需要配置处理器链来处理进来的连接请求。 2. **身份验证**:服务器接收到连接请求后,启动 CAS 认证...

    netty+4G DTU

    2. **实现 ChannelInitializer**:在 ChannelInitializer 中,添加自定义的 ChannelHandler 实例,如 ByteToMessageDecoder 解码器用于解析 4G DTU 发送的二进制数据,以及 MessageToByteEncoder 编码器用于将服务器...

    netty4与spring集成

    2. **Bean 注册**: 创建一个 Netty 服务器的配置类,定义 ServerBootstrap、ChannelInitializer 和 ChannelHandler 等核心组件,并将它们作为 Spring Bean 注册。这些 Bean 可以通过构造函数或 @Autowired 注解注入...

    Netty实战-netty-in-practice.zip

    3. **配置 Pipeline**:在 ChannelInitializer 中,根据需求添加 Handler 到 ChannelPipeline 中。 4. **处理接收到的数据**:在 Handler 中,我们编写业务逻辑,如解码、编码、处理请求、发送响应等。 5. **关闭...

    Netty4详解二:开发第一个Netty应用程序

    Netty是Java领域的一款高性能、异步事件驱动的网络应用框架,主要用于快速开发可维护的高性能协议服务器和客户端。在本篇文章中,我们将深入探讨如何使用Netty4开发第一个Netty应用程序,以此来理解其核心概念和工作...

    netty-http3使用代码

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,常用于开发服务器和客户端的高并发应用。HTTP/3 是互联网上HTTP协议的最新版本,它基于QUIC协议,旨在解决HTTP/2的一些问题,如头部压缩效率低、TCP连接延迟等...

    Android使用netty

    然后,创建ServerBootstrap,配置ChannelInitializer,用于初始化接受到的新连接的Channel的Pipeline。在Pipeline中添加服务器端的处理器,并监听绑定端口,等待客户端连接。 Android端与服务器端的数据交互,可以...

    基于netty编写的socket服务端

    .childHandler(new ChannelInitializer() { @Override public void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new MyBusinessHandler()); } }); ChannelFuture f = b.bind...

    用netty实现文件传输

    - 服务器端创建 ServerBootstrap,配置 ChannelInitializer 来添加 ChannelHandler,启动服务器并监听指定端口。 - 客户端创建 Bootstrap,配置 ChannelHandlerContext,通过 writeAndFlush 方法发送 ByteBuf 实现...

    整合netty实时通讯

    - 使用 Netty 创建 WebSocket 服务器,首先需要定义一个 ChannelInitializer,配置处理 WebSocket 数据的 ChannelHandler。例如,WebSocketFrameDecoder 和 WebSocketFrameEncoder 用于解码和编码 WebSocket 帧。 ...

    netty搭建TCP、UDP服务

    在具体实现过程中,首先需要定义ChannelInitializer,它会在新建立的Channel中添加所需的ChannelHandler。然后,根据TCP或UDP的需求,配置Bootstrap并绑定监听地址。对于TCP服务,还需要处理连接建立、数据接收和...

    resteasy使用netty

    2. 配置Netty服务器:创建一个ServerBootstrap实例,设置ChannelInitializer以处理HTTP请求。 3. 创建RestEasy应用上下文:使用ResteasyBootstrap类初始化RestEasy,并将RestEasy的ContextProvider注册到Netty服务器...

Global site tag (gtag.js) - Google Analytics