大文件上传场景-node服务器设置超过两分钟的请求超时时间

655 阅读2分钟

1.为什么要设置node服务器超过两分钟的请求超时时间?

http请求流程:vue->express->java

因为业务需要,在上传大文件的场景,虽然已经做了切片处理,把GB单位的文件分成很多小片上传,但是在最后一个切片发到后端后,后端需要进行文件合并以及文件解密的操作。文件解密的操作是非常耗服务器内存及时间的。所以前端发送的请求,通过node服务器做的请求转发,很容易就出现请求时间超过两分钟,后端还没返回的情况。

image.png

2.初步解决方案-优化交互流程

(1)拆分流程,把文件上传和文件解密流程分开,把同步操作改成异步操作,先让用户把文件上传完,再让用户点击解密按钮进行解密。

(2)增大node服务器的超时请求时间,node服务器默认的超时时间是2分钟,超过两分钟的请求都会超时中断。

(3)查阅官方文档,对express中间层进行超时时间的设置,发现不起作用,翻阅了两三个小时才找到原因。是因为公司现有的node环境版本太低了只有v10+的版本,所以对请求超时的api的调用是没用的。必须要升级node版本到v13+以上才行。

image.png

3.具体处理方法

升级好node版本以后再进行以下操作

  • 对所有请求设置超时时间
const express = require('express')
const app = express()
const httpServer = http.createServer(app)
httpServer.listen(6666,()=>{})
httpServer.setTimeout(600000) //设置为了600秒,即十分钟
  • 对单个请求设置超时时间
app.use('/xxxx',(req,res)=>{
    req.setTimeout(600000)    //设置请求的超时时间,设置为了600秒,即十分钟
    //res.setTimeout(600000)  //也可以设置响应的超时时间
})