【问题标题】:NodeJS - socket hang up errorNodeJS - 套接字挂起错误
【发布时间】:2015-09-13 09:09:27
【问题描述】:
我正在使用 node.js 向服务器发送超过 50 个请求。然而,在 20-30 个请求之后,我收到了一个套接字挂起错误。
错误--
Error: socket hang up
at createHangUpError (http.js:1472:15)
at Socket.socketOnEnd [as onend] (http.js:1568:23)
at Socket.g (events.js:180:16)
at Socket.EventEmitter.emit (events.js:117:20)
at _stream_readable.js:920:16
at process._tickCallback (node.js:415:13)
【问题讨论】:
标签:
angularjs
node.js
sockets
【解决方案1】:
TL;DR:
这可能是由 Node 触发其 GC 并冻结所有操作引起的问题,这会导致不可预知的偶发“套接字挂起”错误。
我也遇到过类似的情况。我启动了一堆包含在并行运行的 Promise 中的服务器调用,然后有一个带有 sleep 的循环,它会定期检查它们的完成情况。我观察到以下模式:
- 调用会在一段时间内迅速完成
- 然后出现减速
- 然后最终出现一些“套接字挂起”错误
- 然后服务器调用会立即继续
这种模式不断重复。我调用的服务器上的 DataDog 统计数据没有显示可能是主要原因的延迟变化,所以我的结论是 - 它是 Node 应用程序端的东西。
如果问题是由 GC 引起的——那是个坏消息,因为 GC 通常被称为“魔术”:)。你无法预测它会在什么时候以及多深。
HTH
【解决方案2】:
是的,看起来您的后端服务器正在挂起套接字,可能是由于超时或容量问题。你能限制你发送的请求吗?使用 async 之类的库(使用 Limit 方法)可能会帮助您以简单的方式限制连接。