Pu Zhibing
2025-03-07 297512bc22b179b7038d96a1ff033eceaed38c4b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package com.ruoyi.dataInterchange.netty.server;
 
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelOption;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
 
/**
 * @author zhibing.pu
 * @Date 2025/3/3 19:24
 */
@Configuration
public class NettyConfig {
    /**
     * 用户线程数
     */
    private Integer bossThread = 5;
    /**
     * 工作线程数
     */
    private int workThread = 10;
    /**
     * 心跳
     */
    private Boolean keepAlive = true;
    
    @Autowired
    private NettyInitalizer nettyInitalizer;
    
    @Bean(name = "bossGroup", destroyMethod = "shutdownGracefully")
    public NioEventLoopGroup bossGroup() {
        return new NioEventLoopGroup(bossThread);
    }
    
    @Bean(name = "workerGroup", destroyMethod = "shutdownGracefully")
    public NioEventLoopGroup workerGroup() {
        return new NioEventLoopGroup(workThread);
    }
    
    // 定义
    @Bean(name = "serverBootstrap")
    public ServerBootstrap bootstrap(){
        ServerBootstrap bootstrap = new ServerBootstrap();
        bootstrap.group(bossGroup(), workerGroup())
                .channel(NioServerSocketChannel.class)
                .childHandler(nettyInitalizer);
        bootstrap.option(ChannelOption.SO_KEEPALIVE, keepAlive); // 是否使用TCP的心跳机制
        bootstrap.option(ChannelOption.SO_BACKLOG, 1024); // backLog的队列大小
        // 通过TCP_NODELAY禁用NAGLE,使消息立即发出去,不用等待到一定的数据量才发出去
        bootstrap.option(ChannelOption.TCP_NODELAY, true);
        return bootstrap;
    }
}