首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

客户端Socket查漏补缺

被忽视的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后端、分布式系统感兴趣,扫描上方二维码,欢迎加入我们的知识星球。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181022G0BW8E00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券