netty实战之ChannelOption配置
来源:互联网 发布:阿里云亚马逊防止关联 编辑:程序博客网 时间:2024/05/16 04:47
服务端ServerBootstrap之ChannelOption配置
public static void main(String[] args) throws InterruptedException { EventLoopGroup parentGroup = new NioEventLoopGroup(); EventLoopGroup childGroup = new NioEventLoopGroup(); ServerBootstrap serverBootstrap = new ServerBootstrap(); serverBootstrap.group(parentGroup, childGroup); serverBootstrap.option(ChannelOption.SO_REUSEADDR,true); serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true) serverBootstrap.childOption(ChannelOption.TCP_NODELAY, true); }
SO_REUSEADDR=true
设置SO_REUSEADDR为true,意味着地址可以复用,比如如下场景
某个进程占用了80端口,然后重启进程,原来的socket1处于TIME-WAIT状态,进程启动后,使用一个新的socket2,要占用80端口,如果这个时候不设置SO_REUSEADDR=true,那么启动的过程中会报端口已被占用的异常。
注意,这个SO_REUSEADDR是使用serverBootstrap的option方法来设置,而不是使用childOption方法来设置,要知道具体原因,可以先看李林峰关于netty线程模式
Netty系列之Netty线程模型
简单来说就是option操作是针对parentGroup的,而childOption是针对childGroup的。
SO_KEEPALIVE=true
SO_KEEPALIVE=true,是利用TCP的SO_KEEPALIVE属性,当SO_KEEPALIVE=true的时候,服务端可以探测客户端的连接是否还存活着,如果客户端因为断电或者网络问题或者客户端挂掉了等,那么服务端的连接可以关闭掉,释放资源。
TCP_NODELAY=true
如果TCP_NODELAY没有设置为true,那么底层的TCP为了能减少交互次数,会将网络数据积累到一定的数量后,服务器端才发送出去,会造成一定的延迟。在互联网应用中,通常希望服务是低延迟的,建议将TCP_NODELAY设置为true。
客户端Bootstrap之ChannelOption配置
public static void main(String[] args) throws InterruptedException { EventLoopGroup eventLoopGroup = new NioEventLoopGroup(); Bootstrap bootstrap = new Bootstrap(); bootstrap.group(eventLoopGroup); bootstrap.option(ChannelOption.SO_KEEPALIVE, Boolean.TRUE) .option(ChannelOption.TCP_NODELAY, Boolean.TRUE) .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 3000); }
客户端的netty代码,一般就使用一个EventLoopGroup就可以了,所以这里用option方法来设置属性。
SO_KEEPALIVE和TCP_NODELAY的含义跟上面服务端代码是一样的。
通常客户端代码中还会设置一个CONNECT_TIMEOUT_MILLIS,表示客户端调用服务端接口的超时时间。这个设置可以当做一个默认设置,我们在应用层,服务端接口一定要能支持设置超时时间,因为不同的业务服务接口,针对不同场景,超时时间可能是不同的。
上面这些netty中关于ChannelOption属性设置,已经在线上用了三年了,并且经过了大流量的验证,暂时还没发现问题。
- netty实战之ChannelOption配置
- Netty之ChannelOption
- Netty之ChannelOption
- Netty之ChannelOption
- netty之ChannelOption
- Netty之ChannelOption
- Netty之ChannelOption
- Java网络编程之Netty服务端ChannelOption.SO_BACKLOG配置-yellowcong
- Netty 之 ChannelOption的TCP_NODELAY属性设置
- Netty ChannelOption 参数含义
- Netty中的ChannelOption
- Netty——ChannelOption
- 一起学Netty(十六)之 ChannelOption的TCP_NODELAY属性设置
- netty实战之百万级流量NioEventLoopGroup线程数配置
- nio实战之netty实现
- Netty中ChannelOption中各个字段表示内容
- Java netty的option(ChannelOption.SO_BACKLOG,1024 )的意思
- Java netty的option(ChannelOption.SO_BACKLOG, backLog)什么意思
- C和指针 第七章笔记
- 旋转词
- 几种视频加密算法介绍
- 开源的 Restful Api 集成测试工具 Hitchhiker
- zoj-3806(几何+二分)
- netty实战之ChannelOption配置
- 调试路由器驱动小结
- [LintCode]400.最大间距
- 关于C#中webbrower控件调用的浏览器不支持热力图功能的解决办法
- 拆,Spring Boot基础教程
- 跳动的小球
- java 增强循环
- self.delegate = self?
- spring事物