NodeJs长时间不活动错误:此套接字已被另一方结束

时间:2016-03-06 05:23:43

标签: node.js sockets nginx digital-ocean node-mysql

我正在使用node-mysql https://github.com/felixge/node-mysql

这种情况发生在随机时间,不太确定是什么触发了它。我在长时间不活动后收到它,但并不总是发生。这是下面的堆栈跟踪: -

server-0 (err): Trace: AUTHENTICATION ERROR: Error: This socket has been ended by the other party. Auth: abcuser
server-0 (err):     at /var/www/dating/www/libs/authentication.js:36:17
server-0 (err):     at _rejected     (/var/www/dating/www/node_modules/q/q.js:807:24)
server-0 (err):     at /var/www/dating/www/node_modules/q/q.js:833:30
server-0 (err):     at Promise.when (/var/www/dating/www/node_modules/q/q.js:1077:31)
server-0 (err):     at Promise.promise.promiseDispatch (/var/www/dating/www/node_modules/q/q.js:751:41)
server-0 (err):     at /var/www/dating/www/node_modules/q/q.js:573:44
server-0 (err):     at flush (/var/www/dating/www/node_modules/q/q.js:108:17)
server-0 (err):     at nextTickCallbackWith0Args (node.js:415:9)
server-0 (err):     at process._tickDomainCallback (node.js:385:13)

我正在使用restify服务器。

托管在使用nginx和带代理的nodejs配置的数字海洋上。

任何帮助?

1 个答案:

答案 0 :(得分:0)

您可以通过以下方式更详细地了解这一点:

  1. 查看连接和断开连接之间的时差。看看它是否一致。然后检查是否有特定时间的超时设置。你可能会超时。

  2. 使用NODE_DEBUG环境变量。

    env NODE_DEBUG=* node yourprogram.js args

    这将使节点显示内部跟踪,例如套接字正在执行的操作。您还可以使用NODE_DEBUG=net,tls代替*

  3. 将其范围扩展到特定模块
  4. 使用Wireshark,侦听该端口并按照流进行操作。您可以看到导致断开连接的原因。例如:如果设置了带有RST标志的TCP数据包,请查看发送它的主机。