本文记录下如何在我们的项目中创建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

最低0.47元/天 解锁文章
1854

被折叠的 条评论
为什么被折叠?



