关于"保持 HTTP 连接"和“连接超时N秒"的说明

理解保持HTTP连接与服务器性能优化
本文深入探讨了HTTP连接在服务器性能优化中的作用,解释了非持久连接与持久连接的区别,阐述了连接超时机制如何帮助减少资源消耗,并介绍了配置数据库属性以提升服务器效率的方法。
部署运行你感兴趣的模型镜像

保持 HTTP 连接

      先引用下网站上的一些说明如下:大多数 Web 浏览器要求服务器在多个请求中保持连接打开。这被称为保持 HTTP 连接。保持连接是一个 HTTP 规范,它能够显著增强服务器性能。如果没有它,浏览器将必须为包含多个元素(如图形)的页进行大量的连接请求。可能需要为每个元素进行单独连接。这些额外的请求和连接要求额外的服务器活动和资源,这将会降低服务器的效率。它们还会大大降低浏览器的速度和响应能力,尤其是在网络连接速度较慢的地方。引用自理想博客 ,不过光了解这个还不够,想要更好的理解保持HTTP连接,我们还需要了解HTTP协议里面的非持久连接持久连接的概念,

 

连接超时

 

连接超时有助于减少由空闲连接消耗的处理资源损失。启用连接超时时,IIS 会在连接级别执行以下类型的连接超时:

  • 客户端已向服务器发送了数据,现处于空闲状态造成的连接超时。
  • 已建立了与服务器的连接,但客户端未发送数据时造成的服务器侦听超时。
  • 响应超时(基于可配置的最小字节数/秒的值)。
  • 请求超时,它禁止客户端向服务器发送不合理的慢速请求(例如,1 比特/秒)。

要判断是否应该设置连接超时,请使用系统监视器记录万维网发布服务(WWW 服务)和 FTP 服务对象中的当前连接、最大连接和连接尝试总次数计数器。继续记录一段时间,直到完全把握常规范围;通常,这可能需要几天到一周或更长的时间,而且需要定期重复执行。有关详细信息,请参阅性能监视

ServerListenTimeout 配置数据库属性不再存在。ServerListenTimeout 已被以下配置数据库属性代替:

  • ConnectionTimeout:指定服务器断开非活动的连接前要等待的总时间数(以秒为单位)。
  • MinFileBytesPerSec:当 IIS 响应客户端请求时,MinFileBytesPerSec 属性决定了客户端接收整个响应的时间长短。如果客户机接收整个响应所花的时间太长,内核模式驱动程序 HTTP.sys 会根据超时值终止连接。超时值的计算方式是:将整个响应(包括标题)的大小除以 MinFileBytesPerSec 属性,获得最大的允许响应时间长短(以秒为单位)。例如,如果将 MinFileBytesPerSec 设置配置为 2048,那么大小为 2 KB 的响应需要在 1 秒内完成。默认值是 240 字节/秒。此时间段可防止客户机发送较大的响应请求(比如文件下载),然后故意以较慢的速度接收响应,消耗服务器上的资源,甚至有可能中断为其他客户机提供的服务。 

您可能感兴趣的与本文相关的镜像

ComfyUI

ComfyUI

AI应用
ComfyUI

ComfyUI是一款易于上手的工作流设计工具,具有以下特点:基于工作流节点设计,可视化工作流搭建,快速切换工作流,对显存占用小,速度快,支持多种插件,如ADetailer、Controlnet和AnimateDIFF等

### SSE 连接保持持久的方法 Server-Sent Events(SSE)本质上是基于 HTTP 协议的长连接,用于实现服务器到客户端的单向通信。为了保持 SSE 连接持久,需要从客户端服务器端两方面进行优化配置。 #### 客户端保持连接持久的方法 在客户端,可以通过监听 `error` 事件来处理连接中断的情况,并自动重新建立连接。SSE 的 `EventSource` 接口提供了内置的重连机制,可以通过设置 `reconnect` 延迟时间来控制重连行为。 ```javascript const eventSource = new EventSource('http://example.com/sse'); eventSource.addEventListener('message', (event) => { console.log('Received message:', event.data); }); eventSource.addEventListener('error', () => { console.error('Connection error, retrying...'); }); ``` 此外,可以通过 `AbortController` 手动控制连接的开启与关闭,避免不必要的连接占用资源[^4]。 #### 服务器保持连接持久的方法 在服务器端,保持 SSE 连接持久需要确保 HTTP 连接不会因超时而断开。以下是一些关键配置: 1. **HTTP 超时设置**:服务器应禁用或延长连接超时时间,防止因长时间无数据传输而导致连接被关闭。例如,在 Node.js 中可以使用以下代码: ```javascript res.setHeader('Content-Type', 'text/event-stream'); res.setHeader('Cache-Control', 'no-cache'); res.setHeader('Connection', 'keep-alive'); res.setHeader('Keep-Alive', 'timeout=600'); ``` 2. **保持连接活跃**:服务器可以定期发送心跳消息(如空数据或注释),确保连接处于活跃状态,避免因超时而断开。 ```javascript setInterval(() => { res.write(': heartbeat\n\n'); }, 30000); // 每30发送一次心跳 ``` 3. **负载均衡与连接管理**:为了避免连接数限制,服务器可以使用负载均衡技术,将客户端连接分散到不同的子域名或 IP 地址上,从而缓解单一域名下的并发连接限制问题[^1]。 #### 连接数限制的应对策略 由于 HTTP/1.x 协议对同一域名下的并发连接数有限制(通常是 6 个),如果打开多个使用 SSE 的标签页或应用程序,可能会耗尽连接池,导致新的 SSE 连接无法建立。为了解决这一问题,可以采用以下策略: - **使用 HTTP/2**:HTTP/2 支持多路复用,可以在同一个连接上处理多个请求响应,从而减少连接数限制的影响。 - **优化 SSE 使用场景**:评估是否所有实时更新场景都必须使用 SSE,或者某些场景可以通过短轮询、WebSockets 等替代方案来减少连接数。 - **分散连接**:通过子域名或 IP 地址分散连接,避免单一域名下的连接数限制问题。 #### 连接终止与清理 在某些情况下,可能需要手动终止 SSE 连接。客户端可以通过 `AbortController` 来实现这一点: ```javascript let abortController; const openSSE = async () => { abortController = new AbortController(); const response = await fetch('http://example.com/sse', { signal: abortController.signal }); console.log(response); }; const closeSSE = () => { if (abortController) { abortController.abort(); } }; ``` 这种方法可以有效管理连接生命周期,避免不必要的资源占用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值