2013-11-22 40 views
4

我已經在VPS上設置了一個帶有socket.io的Node.JS服務器,並且我每隔10秒向所有用戶廣播連接的客戶端的數量。這通常工作得很好,雖然很多時候,連接不能建立,我得到這個錯誤(我改變了IP了一下):Socket.io到服務器的連接有時不起作用

GET http://166.0.0.55:8177/socket.io/1/?t=1385120872574 

重裝站點之後,通常可以建立連接,但我不知道爲什麼失敗的連接首先發生,我也不知道如何調試socket.io代碼。有時我無法連接到服務器,我必須重新啓動服務器。

其他信息:

  • 我的主網站不同的服務器(使用CakePHP的一個LAMP環境)上的運行速度比Node.js的服務器。
  • 我用永遠運行服務器
  • 我有很多連接的客戶端(1000左右)
  • 我的VPS擁有512 MB RAM和CPU是永遠不會高於25%
+0

難道你的節點工藝CPU拿出100%? (只是節點CPU不是整個服務器)因爲Node.js是單線程的。 –

+0

不知道如何檢查這個,我真的是新的服務器端:/ –

+1

嘗試在Linux外殼「頂部」的命令,並找到node.js過程。 –

回答

3

頂部後命令,請嘗試:

socket.on('error', function (err) { 
    console.log("Socket.IO Error"); 
    console.log(err.stack); // this is changed from your code in last comment 
}); 

另外,您可以嘗試較慢的傳輸。默認情況下,但如果你的服務器Socket.io使用的WebSocket無法分配足夠的資源,你可以嘗試另一種運輸是速度較慢,但​​使用較少的資源

io = socketIo.listen(80); 
io.set('transports', ['xhr-polling']); 
+0

當我將代碼更改爲console.log(err.stack)時,我得到一個未定義的。我需要從服務器發送一些信息來完成這項工作嗎? –

+0

'io.set('transports',['xhr-polling']);'似乎已經解決了這個問題,因此我將答案標記爲正確:)有沒有辦法調試「無法分配足夠的資源」問題?更大/更強的VPS能夠解決這個問題嗎? –

+0

您是否可以在任何時候重現問題?或者是在生產一個產品之後才發生?就我個人而言,我認爲它可能與您的服務器無關。你可以在另一個沒有用戶的空白vps上嘗試。如果它仍然發生,你的vps可能會阻塞Websocket連接。 –

相關問題