浏览器长连接|浏览器同域名请求最大并发限制

博主在实时监控项目中遇到问题,9个监控只能显示6个,其余请求处于pending状态。原因是浏览器每6个请求一组,实时监控视频流无结束状态,超6个请求会等待。解决方案是更换域名,如将IP换成自定义名字,同时在hosts文件中添加对应IP和域名映射。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、现象

我是做实时监控的时候遇到的这个问题,一开始啥也不懂,为什么明明请求都发了,我9个监控只能显示6个,剩下的就不显示了,请求一直处于pending(等待)状态。

二、原因

经过咨询前辈和疯狂百度终于搞明白了。
通俗点讲,就是浏览器的请求(以我的为例,每个浏览器不一样)每6个一起发,等这6个请求结束了开始下一组,而实时监控的视频流是一直存在的,并不像接口请求或者图片请求之类的有结束状态,所以超过6个后的请求会一直处于pending状态。

三、解决方案

那么,为什么别人的监控大屏可以一下子多画面呢?研究发现,他们采用了这种方式:官方概念这里就不讲了,就是把域名换掉代替原来的域名(注意:只是更换域名,ip是指向同一个的),这样浏览器就不会进行限制了

举个京东的例子:
京东图片域名一直是老域名360buyimg.com http://img13.360buyimg.com/da/jfs/t1879/131/2924301202/126044/7c7cbf5c/56f3b58fN37c1340a.jpg
比如说这张图片,你可以复制打开这个链接,把前面的二级域名的Img13换成img11、img12、img13等,发现都是可以打开的,而且一般是同一IP,有的同学说换成img8、img1、img2等打不开,这个是策略问题。这只是举个栗子。

回归正题:我自己的项目是react框架的,所以大家都知道跨域问题的代理
p1比如:我现在请求实时监控视频的url是
http://192.168.8.23:8089/video/abcd1.flv
p2然后一共有6个
http://192.168.8.23:8089/video/abcd1.flv
http://192.168.8.23:8089/video/abcd2.flv
http://192.168.8.23:8089/video/abcd3.flv
http://192.168.8.23:8089/video/abcd4.flv
http://192.168.8.23:8089/video/abcd5.flv
http://192.168.8.23:8089/video/abcd6.flv
这6个是正常的,也就是status:200
p3接下来,你想要发第7个
http://192.168.8.23:8089/video/abcd7.flv
这个请求会一直处于pending状态,因为它前面已经有6个192.168.8.23下的并发请求了。
p4怎么解决
s1你把192.168.8.23换成其他随便一个名字比如"videoSys",
像这样:http://videoSys:8089/video/abcd7.flv,注意:端口号还是要的
s2这时候你会发现还是不行,为什么呢?
因为浏览器并不知道"videoSys"指向的主机ip是多少
s3接下来你需要干一件事:C:\Windows\System32\drivers\etc,
根据这个目录找到你电脑C盘下的文件hosts,在最下面一行加上
192.168.8.23 videoSys,注意:中间有个空格
然后再试一下,就可以啦!

四、参考文章:

1、浏览器同域名请求的最大并发数限制
2、突破浏览器域名并发限制的解决方案

### 浏览器 HTTP/1 和 HTTP/2 并发请求处理机制对比 #### 一、HTTP/1.1 的并发请求处理 在 HTTP/1.1 中,浏览器通过多路复用来实现并发请求。由于 HTTP/1.1 是基于单线程模型的阻塞协议,因此每个 TCP 连接在同一时间内只能处理一个请求响应对。为了提高性能并减少延迟,浏览器通常会为一个域名建立多个 TCP 连接来发送多个独立的请求[^1]。 然而,这种方式存在一定的局限性。例如,TCP 链接的数量受到操作系统的限制以及服务器端配置的影响。过多的连接数不仅增加了资源消耗,还可能导致网络拥塞等问题。此外,在某些情况下,即使建立了额外的连接,也无法完全解决队首阻塞(Head-of-Line Blocking, HOL Blocking)现象,即当某个请求被阻塞时,后续依赖该链接的其他请求也会受到影响而延缓执行。 #### 二、HTTP/2 的并发请求处理改进 相比之下,HTTP/2 对并发请求的支持更加高效。它引入了一种称为 **多路复用** (Multiplexing)的技术,允许在一个单一的 TCP 连接上时传输多个请求和响应流。这意味着无需像 HTTP/1.1 那样创建多个单独的 TCP 连接即可完成多项任务[^2]。 具体来说,HTTP/2 将数据分割成更小的数据帧,并按照优先级分配这些帧到不的逻辑流中。这种设计使得即使部分流量因某种原因变慢或者暂停也不会影响整个通信过程中的其余部分正常运行。另外,得益于头部压缩算法 HPACK 的应用,减少了每次交互所需传递的信息量从而进一步提升了效率。 以下是两种协议下浏览器对于并发请求的一些主要区别总结: | 特性 | HTTP/1.1 | HTTP/2 | |-------------------|---------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------| | 单次连接能力 | 每个 TCP 连接仅能承载一次请求-响应对话 | 支持一连接上的多条双向通信通道 | | 多重连接需求 | 可能需要开启多个平行的 TCP 连接以满足高吞吐率的需求 | 不再需要维持大量冗余连接 | | 数据包大小优化 | 缺乏有效的头信息压缩手段 | 使用 HPACK 技术显著降低重复字段带来的开销 | | 资源竞争与公平调度 | 存在 HOL blocking 问题 | 提供更好的流控机制及自适应带宽管理 | 综上所述,相较于传统的 HTTP/1.1 方法论而言,现代化标准下的 HTTP/2 明显具备更强健灵活度更高的特性集合用于应对当今互联网环境中日益增长复杂性的挑战[^3]。 ```javascript // 示例代码展示如何利用 Axios 发起 GET 请求 (适用于任何版本 HTTP) const axios = require('axios'); (async () => { try { const response = await axios.get('https://httpbin.org/get'); console.log(response.data); } catch (error) { console.error(error); } })(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值