Netty框架 - TCP参数设置ChannelOption

ChannelOption参数

Bootstrap是Netty提供的客户端连接工具类,主要于简化客户端的创建。常用功能之一是TCP参数设置接口

1、SO_TIMEOUT

控制读取操作将阻塞多少毫秒,如果返回值为0,计时器就被禁止了,该线程将被无限期阻塞。

2、SO_SNDBUF

套接字使用的发送缓冲区大小

3、SO_RCVBUF

套接字使用的接收缓冲区大小

4、SO_REUSEADDR

是否允许重用端口。默认值与系统相关。

5、CONNECT_TIMEOUT_MILLIS

客户端连接超时时间,原生NIO不提供该功能,Netty使用的是自定义连接超时定时器检测和超时控制

6、TCP_NODELAY

是否使用Nagle算法,设置为true关闭Nagle算法。
如果是时延敏感型的应用,建议关闭。
Nagle算法将小的碎片数据连接成更大的报文来最小化所发送的报文的数量。

7、SO_KEEPALIVE

是否使用TCP的心跳机制。
当设置该选项以后,如果在两小时内没有数据的通信时,TCP会自动发送一个活动探测数据报文。
建议:心跳机制由应用层自己实现;

Netty源码分析- AbstractBootstrap类源码

    private final Map<ChannelOption<?>, Object> options = new LinkedHashMap();
   
    /**
     * Channel实例被创建时,指定使用的ChannelOption参数。
     * value参数为null,则移除这个ChannelOption参数
     * 
     * Allow to specify a {@link ChannelOption} which is used for the {@link Channel}
     * instances once they got created.
     * Use a value of {@code null} to remove a previous set {@link ChannelOption}.
     */
    public <T> B option(ChannelOption<T> option, T value) {
        //判空
        if (option == null) {
            throw new NullPointerException("option");
        } else {
            if (value == null) {
                //从map中移除
                synchronized(this.options) {
                    this.options.remove(option);
                }
            } else {
                //添加到map
                synchronized(this.options) {
                    this.options.put(option, value);
                }
            }

            return this.self();
        }
    }

Netty应用

    EventLoopGroup group = new NioEventLoopGroup();
    Bootstrap b = new Bootstrap();
    b.group(group)
     .channel(NioSocketChannel.class)
     .option(ChannelOption.TCP_NODELAY, true)
     .handler(new ChannelInitializer<SocketChannel>() {
         @Override
         public void initChannel(SocketChannel ch) throws Exception {
             ChannelPipeline p = ch.pipeline();
             p.addLast(new LoggingHandler(LogLevel.INFO));
         }
     });
    ChannelFuture f = b.connect(HOST, PORT).sync();


–思想–
每个人都有权利和义务去设法了解重要的事情

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值