【问题标题】:Node.js and Socket.io become unresponsiveNode.js 和 Socket.io 变得无响应
【发布时间】:2013-05-16 05:57:30
【问题描述】:

我有一个在 Node.js 和 Socket.io 上运行的相对简单的聊天类型应用程序。节点服务器从 Minecraft 服务器流式传输聊天数据,然后将其流式传输到使用 Socket.io 连接到网站上的任何客户端。该系统的工作演示可以在这里找到:standardsurvival.com/chat

它在大多数情况下工作得很好,但每隔一段时间节点服务器就会停止响应,并且活动连接在此后不久就会死亡。该进程将在此期间开始消耗 100% 的 CPU,但内存始终保持相对恒定,因此我怀疑是否涉及任何类型的内存泄漏。

这非常令人沮丧,因为我无法始终如一地重现该问题以找出问题所在,而且我不知道该去哪里找。我一直在设置循环并注释掉节点服务器和网站之间管道的各个部分,以尝试找出可能导致它的原因。目前还没有运气。

这个系统背后的代码可以在herehere找到。

有什么想法吗?

【问题讨论】:

  • 你真的希望我们完成数百行代码吗?人们为这样的工作获得了可观的金钱。 ;)
  • 你用的是什么版本的nodejs?
  • 呃,没有。我认为有人可能遇到过类似的问题或之前看到过类似的症状。看看我的项目中有多少部分被广泛使用,即。 Web 浏览器使用 Socket.io 与 Node.js 服务器通信。
  • @spotirca v0.10.2 在我的 linux 生产机器上,v0.8.2 在我的 Mac 开发机器上

标签: node.js socket.io


【解决方案1】:

好吧,我最终弄清楚了问题所在。我正在使用的一个库正在为 Minecraft 服务器的标准 HTTP 请求打开 net.Sockets,但实际上从未关闭它们。显然,请求完成时从未调用过“结束”事件。因此,最终该进程的所有可用文件句柄都被用完并导致新请求彻底失败,这使得服务器似乎停止响应。如果我记录了这个错误,我会很快发现这一点。经验教训。

我为所有套接字添加了超时以至少暂时解决此问题。现在服务器已经运行了好几天没有一个问题:)

【讨论】:

    猜你喜欢
    • 2020-12-11
    • 2014-09-03
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 2016-01-12
    • 1970-01-01
    相关资源
    最近更新 更多