我请求的数据量上万条,于是,我分批请求,用await等待,每批500条,但是一直请求失败,报错socket timeout,
stackoverflow: Node.js GET Request ETIMEDOUT & ESOCKETTIMEDOUT
github: Error: ESOCKETTIMEDOUT in request.js
找到解决方法,但是看不懂,求大神解救
我请求的数据量上万条,于是,我分批请求,用await等待,每批500条,但是一直请求失败,报错socket timeout,
stackoverflow: Node.js GET Request ETIMEDOUT & ESOCKETTIMEDOUT
github: Error: ESOCKETTIMEDOUT in request.js
找到解决方法,但是看不懂,求大神解救
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
首先你要知道错误的原因,根据你给出的链接,上面说这个错误是因为libuv底层只用4个线程,因此如果你有大量请求的时候很可能4线程个就忙不过来了,导致后续的请求只能排队等待,当网络快的时候或许没有问题,但是网络慢得时候很容易超时导致timeout,因此需要增加libuv的线程数。可以通过在程序中增加以下代码来修改libuv的默认线程数
同时你还需要注意记得开启http agent的keepalive属性,因为默认情况下不开启,这会让所有的http连接无法复用底层的socket,在我的项目里采用了这两个方法之后确实大大减少了超时类型的错误