本文通过rocketMq源码说明netty中常见channelOption的含义和用法
先看服务端
SO_BACKLOG:用于指定服务端连接队列长度,当服务器连接处理线程全忙时,已完成三次握手的请求会被临时存放在连接队列中等待被accept,队列满后会拒绝新收到的连接请求
如不设置,该值默认为200左右,对于连接数不太多的场景,默认值就够了,像常见RPC框架的服务端(如dubbo)就没有设置,RocketMq需要支持更高频的连接请求,所以使用了推荐值1024
SO_REUSEADDR:TCP四次挥手的最后阶段,主动发起关闭的一端会处于TIME_WAIT状态,该状态下的socket所用端口无法被复用(默认时间2MSL=4分钟);
在服务端客户端架构中,通常是服务端主动发起连接关闭,在大量连接的场景中,无论是频繁关闭连接和新建连接,还是服务端重启,都需要端口资源,4分钟太长了,不能忍。
SO_REUSEADDR=true就是通知内核,如果端口忙,但socket状态是TIME_WAIT,可以立即重用端口;因为端口资源限制,该配置算是服务端必备的了
SO_KEEPALIVE

本文详细解析RocketMQ服务端和客户端中Netty的channelOption设置,涵盖SO_BACKLOG、SO_REUSEADDR、SO_KEEPALIVE、TCP_NODELAY等,以及它们在高并发场景下的应用和区别。


4969

被折叠的 条评论
为什么被折叠?



