2013-05-16 113 views
4

我有一個相對簡單的聊天類應用程序,運行在Node.js和Socket.io上。節點服務器從Minecraft服務器傳輸聊天數據,然後使用Socket.io將其傳輸到網站上連接的任何客戶端。系統的工作演示可以在這裏找到:standardsurvival.com/chatNode.js和Socket.io無響應

它在大多數情況下工作得很好,但每過一段時間,節點服務器都會停止響應,此後不久就會激活連接。在這段時間內,該進程將開始消耗100%的CPU,但內存總是保持相對恆定,所以我懷疑涉及任何類型的內存泄漏。

這是一件非常令人沮喪的事情,因爲我一直無法足夠重現問題以找出問題所在,而且我也不知道該在哪裏尋找。我一直在設置循環和註釋節點服務器和網站之間的管道的各個部分,以試圖找出可能導致它的原因。至今還沒有運氣。

該系統背後的代碼可以找到herehere

任何想法?

+2

你真的希望我們經歷數百行代碼嗎?人們爲這種工作獲得了嚴重的資金。 ;) – freakish

+0

你使用的是什麼版本的nodejs? – spotirca

+0

呃,沒有。我認爲可能有人可能遇到過類似的問題或曾經見過類似的症狀。看到我的項目中有多少部分被廣泛使用,即。瀏覽器使用Socket.io與Node.js服務器進行通信。 – sbezboro

回答

0

那麼我最終搞清楚了問題所在。我使用的庫是打開net.Sockets用於標準HTTP請求到Minecraft服務器,但從未實際關閉它們。顯然,當請求結束時,「結束」事件從未被調用過。因此,最終該進程的所有可用文件句柄都將被用完,並導致新的請求徹底失敗,從而導致服務器似乎停止響應。如果我記錄了這個錯誤,我會更早地發現這一點。學過的知識。

我增加了一個超時給所有套接字來解決這個至少暫時。現在服務器已經運行了幾天,沒有一個問題:)