并发请求限制请求个数

需求:文件上传,需要一个个的上传,之前使用map循环去请求接口,发现map里的await会失效,后来改为for循环,但是后端要求控制并发请求的数量不然会出错

解决:

// arr需要上传的文件集合 requestQueue请求的队列
arr.forEach((request, index) => {
   this.requestQueue.push(request)
   this.sortQueue(menu[1]) 
})
async sortQueue(menu) {
      // 只要队列中有请求,并且正在进行的请求少于规定限度,就处理队列
      while (this.requestQueue.length > 0 && this.activeRequests.length < 5) {
        const request = this.requestQueue.shift()
        this.activeRequests.push(request)
        const params = {
          ...
        }
        console.log('影像分组入参', params)
        await uploadedImageGroup(params).then(res => {
          console.log('影像分组', res)
          if (res.data.succ === '00') {
            this.$set(request, 'status', 'succ')
          } else {
            this.$set(request, 'status', 'error')
          }
        }).catch(err => {
          this.$set(request, 'status', 'error')
          console.log('err', err)
        }).finally(async() => {
          // 请求完成后从活跃请求数组中移除
          this.finishCount++
          this.activeRequests = this.activeRequests.filter(req => req !== request)
          this.uploadProgress.uploadedNum = this.finishCount
          if (this.finishCount !== this.sortArrLen) {
            this.sortQueue(menu)
          } else {
            this.$emit('update')
          }
        })
      }
    },

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: gRPC 使用基于HTTP/2的传输协议,可以通过使用流式传输和二进制数据编码来提高效率和性能。 由于它具有高效的序列化和反序列化机制,因此在处理大量数据时,它可以显著提高性能。 在使用 gRPC 时,如果服务器端的处理能力不足,或者客户端发送的请求太多而服务器端无法及时处理,就可能会出现请求阻塞的情况。为了避免这种情况,可以通过一些方法来优化和调整 gRPC 请求的参数和配置,例如增加服务器资源、调整超时时间、使用负载均衡等方法。 此外,为了防止 DDoS 攻击等安全问题,可以在服务器端进行一些安全性措施,例如使用 TLS/SSL 加密传输、设置请求频率限制等方法。 ### 回答2: gRPC支持同时处理多个请求,不会因为并发请求而发生阻塞。gRPC使用一个基于流的传输协议来支持客户端和服务器之间的双向通信。当客户端发送多个请求时,服务器可以同时接收并处理这些请求,而不需要等待前一个请求的响应返回。这种并发处理的能力可以提高系统的吞吐量和性能。 在gRPC中,默认情况下使用了HTTP/2传输协议,它支持多个请求和响应在同一个TCP连接上进行复用。HTTP/2使用了多路复用技术,即在一个连接上同时进行多个请求和响应的传输,这样就避免了串行处理请求限制。每个请求都会被分配一个唯一的流ID,并按照流ID顺序进行处理,保证了请求和响应之间的顺序性。 另外,gRPC还提供了异步处理请求的能力。客户端可以使用异步API来发送请求,并在后台处理其他的任务,而不需要等待每个请求的响应返回。服务器也可以使用异步API来处理请求,从而同时处理多个请求,提高系统的性能和资源利用率。 总而言之,gRPC能够高效地处理并发请求,不会发生阻塞,并且支持异步处理,从而提高系统的性能和可扩展性。 ### 回答3: gRPC并发多个请求不会阻塞,因为它使用了多路复用的技术。 在gRPC中,客户端可以同时发起多个请求,并且这些请求可以在同一个网络连接上进行传输。这种并发请求的实现是通过使用一个称为多路复用的技术来实现的。多路复用允许在一个连接上同时传输多个请求和响应,而不需要等待一个请求的完成才能发送下一个请求。 当多个请求同时发送时,每个请求都会在不同的流中进行传输,并且每个流都有自己的流控制和传输窗口。这意味着即使一个请求在处理过程中花费了很长时间,它也不会影响其他请求的传输和处理。每个请求的处理是独立的,彼此之间不会相互干扰。 通过使用多路复用和流控制,gRPC可以实现高效的并发处理,而不会阻塞其他请求的传输和处理。这种并发处理能力使得gRPC非常适合于在分布式系统中处理大量并发请求的场景,提供了良好的性能和可扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值