前言
用netty框架也很久了,现在来重温下基本配置
一、netty是什么?
Netty是由JBOSS提供的一个java开源框架,现为 Github上的独立项目。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
也就是说,Netty 是一个基于NIO的客户、服务器端的编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户、服务端应用。Netty相当于简化和流线化了网络应用的编程开发过程,例如:基于TCP和UDP的socket服务开发。
二、使用步骤
1.再springboot项目中引入依赖
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.53.Final</version>
</dependency>
2.编写启动类交由spring去管理
/**
* @Auther: jiliugang
* @Date: 2021/2/23 14:47
* @Description:
*/
@Component
public class TCPServer implements InitializingBean {
private int port = 6002;
private int bossGroupNum = 8;
private int workerGroupNum = 16;
private void run() throws InterruptedException {
NioEventLoopGroup boss = new NioEventLoopGroup(bossGroupNum);
NioEventLoopGroup worker = new NioEventLoopGroup(workerGroupNum);
try {
ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.group(boss,worker)
.channel(NioServerSocketChannel.class)
.childHandler(new ServerChannelInitializer())
.option(ChannelOption.SO_BACKLOG,128)
.childOption(ChannelOption.SO_KEEPALIVE, true);
ChannelFuture sync = serverBootstrap.bind(port).sync();
sync.channel().closeFuture().sync();
}finally {
boss.shutdownGracefully();
worker.shutdownGracefully();
}
}
@Override
public void afterPropertiesSet() throws Exception {
run();
}
}
/**
* @Auther: jiliugang
* @Date: 2021/2/23 14:55
* @Description:
*/
public class ServerChannelInitializer extends ChannelInitializer<SocketChannel> {
@Override
protected void initChannel(SocketChannel socketChannel) throws Exception {
ChannelPipeline pipeline = socketChannel.pipeline();
//添加IdleStateHandler,120s检测一次读事件
pipeline.addLast(new IdleStateHandler(120, 0, 0, TimeUnit.SECONDS));
pipeline.addLast("handler",new ByteToNbMessageDecoder());
}
}
/**
* @Auther: jiliugang
* @Date: 2021/2/23 14:57
* @Description:
*/
public class ByteToNbMessageDecoder extends ByteToMessageDecoder {
@Override
protected void decode(ChannelHandlerContext channelHandlerContext, ByteBuf byteBuf, List<Object> list) throws Exception {
//自定义协议解析处理
}
}
至于协议解析处理可以参考我另一篇文章
netty自定义协议解析
总结
以上就是简单的整合,具体比如在netty中使用spring对象可以在初始化对象时将对象传入,灵活处理