Netty服务器端的创建

本文记录下如何在我们的项目中创建Netty服务器端。‘

一、引入依赖

<dependency>
	<groupId>io.netty</groupId>
	<artifactId>netty-all</artifactId>
</dependency>

二、配置Netty连接信息

netty:
  server:
    host: 192.168.56.10
    port: 1919

三、创建自定义服务器端处理器

这里介绍下服务器端处理器的两种实现:

1、继承SimpleChannelInboundHandler类;

2、继承ChannelInboundHandlerAdapter类。

这两种方式都可以实现服务器端处理器,主要区别在于:

1、SimpleChannelInboundHandler提供了泛型,可以接收任何类型的数据而无需转换,使用ChannelInboundHandlerAdapter需要使用instanceof 进行消息类型检查和类型转换;

2、SimpleChannelInboundHandler在消息处理完毕后通过调用ReferenceCountUtil.release(msg)自动释放消息,ChannelInboundHandlerAdapter需手动管理引用计数进行释放,否则会导致内存泄漏。

3.1 继承SimpleChannelInboundHandler类

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.nio.charset.StandardCharsets;

/**
 * 
 * 自定义入站处理器
 * @Desc:SimpleChannelInboundHandler提供了泛型,可以接收任何类型的数据而无需转换,并将其传递给 
   下一个handler。
 * @create: 2025-09-24 15:49
 **/

@Slf4j
public class MySimpleInBoundHandler extends SimpleChannelInboundHandler<ByteBuf> {

    /* *
     * 接收到消息时触发
     **/
    @Override
    protected void channelRead0(ChannelHandlerContext context, ByteBuf msg) throws Exception {
        String message = msg.toString(StandardCharsets.UTF_8);
        log.info("SimpleChannelInboundHandler:接收到的消息: {}", message);
        // 调用父类的方法,将消息传递给下一个handler
        context.fireChannelRead(message);

    }
	
}

关键点

  • 通过泛型 <ByteBuf> 指定消息类型,channelRead0 的参数直接就是 ByteBuf

  • 不需要也不应该手动调用 release()。父类 SimpleChannelInbou

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值