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

阅读 14.4k
3 个回答

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

process.env.UV_THREADPOOL_SIZE = 128;

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题