nodejs后台中,用request.js post请求数据,报错esockettimeout

发布于 2022-09-06 10:37:38 字数 590 浏览 14 评论 0

clipboard.png
我请求的数据量上万条,于是,我分批请求,用await等待,每批500条,但是一直请求失败,报错socket timeout,
stackoverflow: Node.js GET Request ETIMEDOUT & ESOCKETTIMEDOUT
github: Error: ESOCKETTIMEDOUT in request.js
找到解决方法,但是看不懂,求大神解救

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

×眷恋的温暖 2022-09-13 10:37:38

首先你要知道错误的原因,根据你给出的链接,上面说这个错误是因为libuv底层只用4个线程,因此如果你有大量请求的时候很可能4线程个就忙不过来了,导致后续的请求只能排队等待,当网络快的时候或许没有问题,但是网络慢得时候很容易超时导致timeout,因此需要增加libuv的线程数。可以通过在程序中增加以下代码来修改libuv的默认线程数

process.env.UV_THREADPOOL_SIZE = 128;

同时你还需要注意记得开启http agent的keepalive属性,因为默认情况下不开启,这会让所有的http连接无法复用底层的socket,在我的项目里采用了这两个方法之后确实大大减少了超时类型的错误

幻梦 2022-09-13 10:37:38

关于这个问题,request的github中有对这个问题的讨论:
request
除了你说的那些方案之外,里面也有别人说的解决方案:
request hander

失眠症患者 2022-09-13 10:37:38

我也遇到这个问题了,尝试了StackOverflow别人提供的方式,这种process.env.UV_THREADPOOL_SIZE = 128;还有设置quest 的options(forever:true),问题并没有解决

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文