netty 配置参数


netty 配置参数

       

               

                                

配置参数

        

ChannelOption

public class ChannelOption<T> extends AbstractConstant<ChannelOption<T>> {
    private static final ConstantPool<ChannelOption<Object>> pool = new ConstantPool<ChannelOption<Object>>() {
        protected ChannelOption<Object> newConstant(int id, String name) {
            return new ChannelOption(id, name);
        }
    };
 
    public static final ChannelOption<ByteBufAllocator> ALLOCATOR = valueOf("ALLOCATOR");
    public static final ChannelOption<RecvByteBufAllocator> RCVBUF_ALLOCATOR = valueOf("RCVBUF_ALLOCATOR");
    public static final ChannelOption<MessageSizeEstimator> MESSAGE_SIZE_ESTIMATOR = valueOf("MESSAGE_SIZE_ESTIMATOR");
    public static final ChannelOption<Integer> CONNECT_TIMEOUT_MILLIS = valueOf("CONNECT_TIMEOUT_MILLIS");
 
    public static final ChannelOption<Integer> MAX_MESSAGES_PER_WRITE = valueOf("MAX_MESSAGES_PER_WRITE");
    public static final ChannelOption<Integer> WRITE_SPIN_COUNT = valueOf("WRITE_SPIN_COUNT");
 
    public static final ChannelOption<WriteBufferWaterMark> WRITE_BUFFER_WATER_MARK = valueOf("WRITE_BUFFER_WATER_MARK");
    public static final ChannelOption<Boolean> ALLOW_HALF_CLOSURE = valueOf("ALLOW_HALF_CLOSURE");
    public static final ChannelOption<Boolean> AUTO_READ = valueOf("AUTO_READ");
    public static final ChannelOption<Boolean> AUTO_CLOSE = valueOf("AUTO_CLOSE");
 
    public static final ChannelOption<Boolean> SO_BROADCAST = valueOf("SO_BROADCAST");
    public static final ChannelOption<Boolean> SO_KEEPALIVE = valueOf("SO_KEEPALIVE");
    public static final ChannelOption<Integer> SO_SNDBUF = valueOf("SO_SNDBUF");
    public static final ChannelOption<Integer> SO_RCVBUF = valueOf("SO_RCVBUF");
    public static final ChannelOption<Boolean> SO_REUSEADDR = valueOf("SO_REUSEADDR");
    public static final ChannelOption<Integer> SO_LINGER = valueOf("SO_LINGER");
    public static final ChannelOption<Integer> SO_BACKLOG = valueOf("SO_BACKLOG");
    public static final ChannelOption<Integer> SO_TIMEOUT = valueOf("SO_TIMEOUT");
 
    public static final ChannelOption<Integer> IP_TOS = valueOf("IP_TOS");
    public static final ChannelOption<InetAddress> IP_MULTICAST_ADDR = valueOf("IP_MULTICAST_ADDR");
    public static final ChannelOption<NetworkInterface> IP_MULTICAST_IF = valueOf("IP_MULTICAST_IF");
    public static final ChannelOption<Integer> IP_MULTICAST_TTL = valueOf("IP_MULTICAST_TTL");
    public static final ChannelOption<Boolean> IP_MULTICAST_LOOP_DISABLED = valueOf("IP_MULTICAST_LOOP_DISABLED");
 
    public static final ChannelOption<Boolean> TCP_NODELAY = valueOf("TCP_NODELAY");
    public static final ChannelOption<Boolean> TCP_FASTOPEN_CONNECT = valueOf("TCP_FASTOPEN_CONNECT");
    public static final ChannelOption<Integer> TCP_FASTOPEN = valueOf(ChannelOption.class, "TCP_FASTOPEN");
 
    public static final ChannelOption<Boolean> SINGLE_EVENTEXECUTOR_PER_GROUP = valueOf("SINGLE_EVENTEXECUTOR_PER_GROUP");
 
    public static <T> ChannelOption<T> valueOf(String name) {
    public static <T> ChannelOption<T> valueOf(Class<?> firstNameComponent, String secondNameComponent) {
 
    public static boolean exists(String name) {
 
    public void validate(T value) {
    private ChannelOption(int id, String name) {

           

                   

                                

参数说明

     

allocator:内存分配器

public final class ByteBufUtil {


    static {   //静态语句块
        MAX_BYTES_PER_CHAR_UTF8 = (int)CharsetUtil.encoder(CharsetUtil.UTF_8).maxBytesPerChar();
        String allocType = SystemPropertyUtil.get("io.netty.allocator.type", PlatformDependent.isAndroid() ? "unpooled" : "pooled");
                           //读取参数io.netty.allocator.type,
                           //如果没有设置,根据PlatformDependent.isAndroid()的值设置
                           //4.0版本:unpooled
                           //4.1版本:pooled
        allocType = allocType.toLowerCase(Locale.US).trim();
        Object alloc;
        if ("unpooled".equals(allocType)) {
            alloc = UnpooledByteBufAllocator.DEFAULT;  //4.0版本默认值
            logger.debug("-Dio.netty.allocator.type: {}", allocType);
        } else if ("pooled".equals(allocType)) {
            alloc = PooledByteBufAllocator.DEFAULT;    //4.1版本默认值
            logger.debug("-Dio.netty.allocator.type: {}", allocType);
        } else {
            alloc = PooledByteBufAllocator.DEFAULT;
            logger.debug("-Dio.netty.allocator.type: pooled (unknown: {})", allocType);
        }

        DEFAULT_ALLOCATOR = (ByteBufAllocator)alloc;
        THREAD_LOCAL_BUFFER_SIZE = SystemPropertyUtil.getInt("io.netty.threadLocalDirectBufferSize", 0);
        logger.debug("-Dio.netty.threadLocalDirectBufferSize: {}", THREAD_LOCAL_BUFFER_SIZE);
        MAX_CHAR_BUFFER_SIZE = SystemPropertyUtil.getInt("io.netty.maxThreadLocalCharBufferSize", 16384);
        logger.debug("-Dio.netty.maxThreadLocalCharBufferSize: {}", MAX_CHAR_BUFFER_SIZE);
        FIND_NON_ASCII = new ByteProcessor() {
            public boolean process(byte value) {
                return value >= 0;
            }
        };
    }

        

RCVBUF_ALLOCATOR:缓冲区分器,设置接受缓冲区大小

默认为AdaptiveRecvByteBufAllocator,根据接收数据自动调节大小

.option(ChannelOption.RCVBUF_ALLOCATOR,new FixedRecvByteBufAllocator(4096))
.option(ChannelOption.RCVBUF_ALLOCATOR,new AdaptiveRecvByteBufAllocator(4096))

                     

WRITE_BUFFER_WATER_MARK:写高低水位

public final class WriteBufferWaterMark {
    private static final int DEFAULT_LOW_WATER_MARK = 32768;
    private static final int DEFAULT_HIGH_WATER_MARK = 65536;
    public static final WriteBufferWaterMark DEFAULT = new WriteBufferWaterMark(32768, 65536, false);
    private final int low;
    private final int high;

          

socket 参数

SO_BROADCAST:广播模式
SO_REUSEADDR:socket复用,默认false
SO_KEEPALIVE:连接保活,默认关闭
             开启该功能时,tcp会主动探测连接有效性,默认检测间隔为7200s(2h)

SO_SNDBUF:socket发送缓冲,cat /proc/sys/net/ipv4/tcp_smem查看大小
SO_RCVBUF:socket接收缓冲,cat /proc/sys/net/ipv4/tcp_rmem查看大小
SO_LINGER:关闭socket的延时时间,默认-1
           -1:调用close立即返回,缓冲区的数据会发送到对端
           0:调用close立即返回,缓冲区的数据不会发送到对端
           大于0:阻塞到数据发送完毕、或者超时
SO_BACKLOG:服务端接收连接的队列长度,如果超过最大值,连接会被拒绝
           windows为200,其余128
SO_TIMEOUT:socket连接接收数据的等待超时时间,默认为0,表示无限等待

             

ip 参数

IP_TOS:设置IP头部的Type-of-Service属性,用于描述IP包的优先级和QoS选项
IP_MULTICAST_TTL:多播数据报的存活跳数(time-to-live)
IP_MULTICAST_LOOP_DISABLED:对应IP参数IP_MULTICAST_LOOP,设置本地回环接口的多播功能

IP_MULTICAST_ADDR:对应IP参数IP_MULTICAST_IF,设置对应地址的网卡为多播模式
IP_MULTICAST_IF:对应IP参数IP_MULTICAST_IF2,设置对应地址的网卡为多播模式,支持IPv6

        

tcp 参数

TCP_NODELAY:是否没有延时,立即发送(开启Nagle算法,会延时发送)
             true:禁用Nagle算法,即使用小数据包即时传输
             false:开启Nagle算法,有足够数据量时再发送,数据会有延时

TCP_FASTOPEN_CONNECT:是否开启fast open
TCP_FASTOPEN:socket连接中可以处于等待状态的fast-open请求的个数

         

全局参数

AUTO_READ:自动读取,默认true
AUTO_CLOSE:自动关闭

CONNECT_TIMEOUT_MILLIS:连接超时时间(毫秒),默认30000(30秒)
ALLOW_HALF_CLOSURE:一个连接远端关闭时,本端是否关闭,默认false(本端连接自动关闭)

MAX_MESSAGES_PER_WRITE:一次loop写入的最大消息数
WRITE_SPIN_COUNT:一个Loop写操作执行的最大次数,默认值为1
MESSAGE_SIZE_ESTIMATOR:消息大小估算器,默认为DefaultMessageSizeEstimator

SINGLE_EVENTEXECUTOR_PER_GROUP:是否使用单线程执行ChannelPipeline中的事件,默认true

                

已禁用参数(4.1.77)

MAX_MESSAGES_PER_READ:一次loop读取的最大消息数
                      ServerChannel、NioByteChannel,默认值为16
                      其余channel默认为1

# 写高低水位标记使用户可以控制写入数据速度,从而实现流量控制
# 推荐每次调用channl.write(msg)方法首先调用channel.isWritable()判断是否可写
WRITE_BUFFER_HIGH_WATER_MARK:写高水位标记,默认值64KB
                             如果Netty的写缓冲区中的字节超过该值,
                             Channel.isWritable()返回false
WRITE_BUFFER_LOW_WATER_MARK:写低水位标记,默认值32KB
                             Netty的写缓冲区中的字节超过高水位之后若下降到低水位,
                             则Channel的isWritable()返回true

DATAGRAM_CHANNEL_ACTIVE_ON_REGISTRATION:datagram channel注册的时候是否激活

         

                  

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值