Java Socket 参数详解 setKeepAlive

Java socket 编程中有个 keepalive 选项,看到这个选项经常会误解为长连接,不设置则为短连接,实则不然。

socket 连接建立之后,只要双方均未主动关闭连接,那这个连接就是会一直保持的,就是持久的连接
keepalive 只是为了防止连接的双方发生意外而通知不到对方,导致一方还持有连接,占用资源

其实这个选项的意思是TCP连接空闲时是否需要向对方发送探测包,实际上是依赖于底层的TCP模块实现的,java中只能设置是否开启,不能设置其详细参数,只能依赖于系统配置

keepalive 不是说TCP的长连接,当我们作为服务端,一个客户端连接上来,如果设置了keeplive为 true,当对方没有发送任何数据过来,超过一个时间(看系统内核参数配置),那么我们这边会发送一个ack探测包发到对方,探测双方的TCP/IP连接是否有效(对方可能断点,断网)。
如果不设置,那么客户端宕机时,服务器永远也不知道客户端宕机了,仍然保存这个失效的连接。

当然,在客户端也可以使用这个参数。客户端Socket会每隔段的时间(大约两个小时)就会利用空闲的连接向服务器发送一个数据包。这个数据包并没有其它的作用,只是为了检测一下服务器是否仍处于活动状态。如果服务器未响应这个数据包,在大约11分钟后,客户端Socket再发送一个数据包,如果在12分钟内,服务器还没响应,那么客户端Socket将关闭。如果将Socket选项关闭,客户端Socket在服务器无效的情况下可能会长时间不会关闭。

参考:
【1】https://blog.csdn.net/huang_xw/article/details/7338663
【2】https://www.cnblogs.com/xiao-tao/p/9718017.html

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Socket 是用于网络通信的类,可以通过它来实现客户端和服务器之间的通信。以下是 Java Socket 中常用的参数: 1. InetAddress:表示网络地址,可以用来指定服务器的 IP 地址或者域名。 2. int port:表示端口号,用来指定服务器的监听端口号,客户端通过该端口号与服务器建立连接。 3. int timeout:表示超时时间,用来设置 Socket 的超时时间,如果在指定时间内没有建立连接或者读取数据,则会抛出异常。 4. boolean keepAlive:表示是否开启 TCP 的 KeepAlive 机制,如果开启,则会定期发送心跳包以保持连接的存活状态。 5. int receiveBufferSize 和 int sendBufferSize:分别表示 Socket 的接收缓冲区大小和发送缓冲区大小,可以通过设置这两个参数来优化网络性能。 6. boolean reuseAddress:表示是否开启地址复用,如果开启,则可以在同一台机器上启动多个 Socket 监听同一个端口。 7. boolean tcpNoDelay:表示是否开启 Nagle 算法,如果开启,则会立即发送数据,否则会将数据缓存到一定大小再发送,以减少网络带宽的占用。 8. int trafficClass:表示网络流量类型,可以用来指定数据包的优先级,以保证重要数据包的传输质量。 这些参数可以通过 Socket 的构造方法或者相应的 setter 方法来设置。在实际开发中,我们需要根据具体的需求来选择合适的参数进行配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值