1.关于Socket连接超时时间
参考链接:
https://www.iteye.com/blog/cuisuqiang-1725348
socket的读写是阻塞的,soTimeout是socket读写超时,而不是链接超时。
setSoTimeout
public void setSoTimeout(int timeout)
throws SocketException启用/禁用带有指定超时值的 SO_TIMEOUT,以毫秒为单位。
将此选项设为非零的超时值时,在与此 Socket 关联的 InputStream 上调用 read() 将只阻塞此时间长度。
如果超过超时值,将引发 java.net.SocketTimeoutException,虽然 Socket 仍旧有效。
选项必须在进入阻塞操作前被启用才能生效。
超时值必须是 > 0 的数。超时值为 0 被解释为无穷大超时值。
参数:
timeout - 指定的以毫秒为单位的超时值。
抛出:
SocketException - 如果底层协议出现错误,例如 TCP 错误。
从以下版本开始:
JDK 1.1
另请参见:
getSoTimeout()
2.TCP的三次握手四次挥手
https://blog.youkuaiyun.com/qq_38950316/article/details/81087809
https://www.iteye.com/blog/xiaoz5919-1685138
3.http连接超时keep-alive
https://www.cnblogs.com/pigpdong/p/10899792.html
4.TCP的keep alive和HTTP的Keep-alive
参考链接:https://www.cnblogs.com/cswuyg/p/3653263.html
TCP的keep alive是检查当前TCP连接是否活着;HTTP的Keep-alive是要让一个TCP连接活久点。它们是不同层次的概念。
TCP keep alive的表现:
当一个连接“一段时间”没有数据通讯时,一方会发出一个心跳包(Keep Alive包),如果对方有回包则表明当前连接有效,继续监控。