HTTP 如何实现长连接?在什么时候会超时?

HTTP 实现长连接

1、HTTP 分为长连接和短连接,其实本质上说的是 TCP 的长短连接。TCP 连接是一个双向的通道,它是可以保持一段时间不关闭的,因此 TCP 连接才有真正的长连接和短连接这一个说法。
2、长连接是指的是 TCP 连接,而不是 HTTP 连接。
3、TCP 长连接可以复用一个 TCP 连接来发起多次 HTTP 请求,这样可以减少资源消耗,比如一次请求 HTML,短连接可能还需要请求后续的 JS/CSS/图片等。
4、要实现 HTTP 长连接,在响应头设置 Connection 为 keep-alive,HTTP1.1 默认是长连接,而 HTTP 1.0 协也支持长连接,但是默认是关闭的。

在什么时候会超时

1、HTTP 一般会有 httpd 守护进程,里面可以设置 keep-alive timeout,当 tcp 链接闲置超过这个时间就会关闭,也可以在 HTTP 的 header 里面设置超时时间。
2、TCP 的 keep-alive 包含三个参数,支持在系统内核的 net.ipv4 里面设置:当 TCP 连接之后,闲置了 tcp_keepalive_time,则会发生侦测包,如果没有收到对方的 ACK,那么会每隔 tcp_keepalive_intvl 再发次,直到发送tcp_keepalive_probes就会丢弃该连接。

# TCP发送keepalive探测消息之间的间隔
tcp_keepalive_intvl = 15
# TCP在认为连接已经失效之前应该发送的keepalive探测消息的数量
tcp_keepalive_probes = 5
# TCP连接在空闲多长时间后开始发送keepalive探测消息
tcp_keepalive_time = 1800 
参考资源链接:[Windows下实现Socket连接超时设置](https://wenku.youkuaiyun.com/doc/5n034csyyp?utm_source=wenku_answer2doc_content) 在Windows平台上实现Socket连接超时控制,关键在于合理配置套接字的阻塞模式和利用`select()`函数来监控套接字状态。具体步骤如下: 1. 首先创建一个TCP套接字,使用`socket()`函数。 2. 接着,通过`ioctlsocket()`函数将套接字设置为非阻塞模式。 3. 设置服务器地址和端口,并使用`connect()`函数尝试建立连接。 4. 使用`select()`函数监控套接字状态,通过设置超时参数来控制连接尝试的最大等待时间。 5. 根据`select()`的返回值判断连接是否成功或超时,并相应处理结果。 6. 如果连接成功,可以根据需要将套接字再次设置为阻塞模式进行后续通信。 7. 最后,完成通信后关闭套接字。 在这个过程中,需要注意的是设置超时的精度和正确处理`select()`返回的各种情况。例如,当`select()`返回值大于0时,需要检查`FD_ISSET()`的结果来确定连接是否成功。如果返回0,则表示超时;如果返回-1,则可能需要调用`WSAGetLastError()`来获取错误信息,可能是套接字选项设置有误或网络问题导致的。 通过以上步骤,你将能够在Windows平台上对Socket连接进行有效的超时控制,避免应用程序因网络延迟等问题而长时间无响应。对于想要更深入理解或遇到问题时,建议参考《Windows下实现Socket连接超时设置》一文,其中详细介绍了实现这一功能的各个方面,包括错误处理和代码示例。 参考资源链接:[Windows下实现Socket连接超时设置](https://wenku.youkuaiyun.com/doc/5n034csyyp?utm_source=wenku_answer2doc_content)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值