被忽视的Socket选项
TCP_NODELAY
setTcpNodelay(true) 关闭Socket的缓冲。此功能有点类似于flush。即不使用缓存而是直接将数据包推送给服务端。
SO_LINGER
setSoLinger(true , 200) 表示当Socket关闭后,等待200秒,等待数据发送和接收回应。当设置为0时,那么当Socket关闭时,所有未发送的数据都会被丢弃。
SO_TIMEOUT
此功能大家用的应该比较多,表示read()阻塞时间。
SO_RECVBUF
从名字即可以看出此功能主要是设置用于网络输入的建议接收缓冲区大小。根据Socket用途设置此值,可以适当的提高效率,如Socket传输的是小报文,则可以将此值设置为较小如2K。如果是大一点的报文,可以设置为16K。
SO_SENDBUF
同SO_RECVBUF,不同时的用于设置输出的建议缓冲区大小。
SO_KEEPALIVE
启用此方法,Socket会在空闲时发送一个数据包以确保服务器在线(一般是2小时)。如果服务器无响应,客户端会持续11分钟,在第12分钟的时候,如果未收到响应,客户端就关闭Socket。
SO_REUSEADDR
看名称即可以知道,表示地址的重复使用。主要是为了解决端口在Socket已经被关闭的情况下,确未能被及时释放,但是端口又需要被其余线程使用的情形。
注意:要使用此方法只能使用无参构造函数,然后利用无参构造获取到的对象调用setReuseAddress函数,同时前一个Socket与后一个Socket必须都设置setReuseAddress为true。
客户端的自动重连小例子
如果你对Linux、Java后端、分布式系统感兴趣,扫描上方二维码,欢迎加入我们的知识星球。
领取专属 10元无门槛券
私享最新 技术干货