前言
问:假如页面一次性请求有上百个,你应该如何处理这种请求并发?
答:so easy!循环请求?肯定是不对的,否则一次性并发上百次请求,差点的服务器得崩溃了,我甚至一度以为你是在搞Dos攻击。我们可以通过任务队列的缓存来合理控制并发数据。
我们知道浏览器发起的请求最大并发数量一般都是 6~8
个,这是因为浏览器会限制同一域名下的并发请求数量,以避免对服务器造成过大的压力。本文思路的核心就是保持浏览器的最大并发请求,多出的请求数加入队列缓存。
1. 实现并发请求场景
我们现实一下简单的100次直接并发请求的场景,本地实现一个简单的前端页面和express后台服务:
1 | html复制代码<!DOCTYPE html> |
1 | js复制代码const express = require('express'); |
一次性并发上百个请求,要是配置低一点,又或者带宽不够的服务器,直接宕机都有可能,所以我们前端这边是需要控制的并发数量去为服务器排忧解难。
2. 优化并发请求场景
如下所示,定义一个 queue
用来缓存请求队列,定义一个参数 current
记录当前正常并发执行的接口请求数量。每一次循环请求时都会先将请求接口缓存在队列queue
中,当前的并发的请求数量 current
小于默认最大的请求限制数量 limitCount
时候,从队列头部中选择一个请求并开始执行,并且 current
数量+1,执行完成后current
数量-1,并且继续递归执行。
1 | html复制代码<!DOCTYPE html> |
本文转载自: 掘金