1.需求分析:
跑一个定时任务每十秒从数据库中查询一次数据,存到redis中,然后通过netty将数据推送到每一个连接的客户端
2.具体实现
引入pom依赖,因为sprongboot已经集成了合适的netty版本,所以是不需要额外指定版本,如果版本不匹配可能报错
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
</dependency>
2.1定义一个NettyServer用来配置netty中channel的一些配置信息,及对数据任务的处理
@Component
public class NettyServer {
private static Logger logger = LoggerFactory.getLogger(NettyServer.class);
@Autowired
private ServerHandler serverHandler;
public static ServerSocketChannel serverSocketChannel;
public void start(int port) throws Exception {
// 连接处理group
EventLoopGroup boss = new NioEventLoopGroup();
// 事件处理group
EventLoopGroup worker = new NioEventLoopGroup();
//1.创建ServerBootStrap实例
ServerBootstrap bootstrap = new ServerBootstrap();
// 绑定处理group
//2.设置并绑定Reactor线程池:EventLoopGroup,EventLoop就是处理所有注册到本线程的Selector上面的Channel
bootstrap.group(boss, worker)
//3.设置并绑定服务端的channel
.channel(NioServerSocketChannel.class)
// 保持连接数
.option(ChannelOption.SO_BACKLOG, 1024)
// 有数据立即发送
.option(ChannelOption.TCP_NODELAY, true)
// 保持连接
.childOption(ChannelOption.SO_KEEPALIVE, true)
// 处理新连接
//设置了客户端连接socket属性。
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel sc) throws Exception {
// 增加任务处理
ChannelPipeline pipeline = sc.pipeline();
pipeline.addLast(new HttpServerCodec());
/