2011-09-08 181 views
2

我正在我的筆記本電腦上使用node.js和socket.io製作一個小型多人遊戲。偶爾,當我想測試一些多人遊戲功能時,我使用我的電腦登錄遊戲(PC和筆記本電腦連接到局域網)。 Socket.io連接到我的路由器的IP(196. ...)和端口8080.一切都運行良好,直到今天,當我想在我改變任何東西時看到它是如何工作的 - 突然它沒有。我首先在我的筆記本電腦上打開Goog​​le Chrome,然後登錄,確定無誤。然後,我在PC上打開Goog​​le Chrome並嘗試連接,但無法正常工作。首先,用戶輸入自己的名字和密碼的格式,並點擊登錄按鈕,調用該函數:Google Chrome是否支持socket.io?

  login = function() 
      { 
       var n = document.forms['logn']['name'].value; 
       var p = document.forms['logn']['password'].value;    

      var socket = io.connect("http://192.168.0.13:8080"); 
      socket.emit("login", {n: n, p: p}); 

      socket.on("got", function(data){ 
       if (data.good) 
       { 
         main(socket, n) 
       } 
       else 
       { 
         alert("Failed to log in."); 
       } 
      }); 
      } 

當我的函數來獲取的叫,什麼都不會發生。我注意到,服務器日誌類似這樣的消息:

設置請求GET /socket.io/1/websocket/

但是XHR輪詢更往往比WebSocket的。這就是我現在所知道的,同樣,在Firefox上一切正常,所以我認爲這是Google Chrome的一個問題。

服務器日誌,當我嘗試從PC登錄:

調試 - 提供靜態/socket.io.js調試 - 客戶端授權
信息 - 握手授權30836340583773206
調試 - 設置請求GET /socket.io/1/websocket/30836340583773206
調試 - 客戶端30836340583773206
調試設置心跳間隔 - 客戶端授權
調試 - 設置請求GET /socket.io/1/xhr-polling/30836340583773206?t=13155096 66877個
調試 - 設置輪詢超時
調試 - 丟棄運輸
調試 - 清除心跳間隔爲客戶30836340583773206
調試 - 提供靜態/socket.io.js

+0

? – Matt

+0

另外,您的Mac上有哪些Chrome版本,以及PC上的內容是什麼?我知道有一個新版本的網絡套接字協議下線 – Matt

+0

您使用的是什麼版本的Chrome,以及您使用的是什麼版本的Socket.IO? Chrome最近在Chrome 14中更新了它的websocket協議版本(http://updates.html5rocks.com/2011/08/What-s-different-in-the-new-WebSocket-protocol)。好消息是最新版本的SocketIO確實支持這個新協議。 – ebidel

回答

4

我只是恰好相同問題。

我可以握手,並通過Chrome進行身份驗證,但任何發射都沒有在客戶端上正確處理(雖然Socket.io發送它們)。

登錄到您的服務器並更新socket.io。

$> npm ls會告訴你已安裝模塊的最新版本。在我的例子中,我正在運行:

/var/www/discovery/node 
├─┬ [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ └── [email protected] 
├── [email protected] 
├── [email protected] 
├── [email protected] 
├── [email protected] 
├─┬ [email protected] 
│ └─┬ [email protected] 
│ └── [email protected] 
└─┬ [email protected] 
    ├── [email protected] 
    ├── [email protected] 
    └─┬ [email protected] 
    ├── [email protected] 
    ├── [email protected] 
    └── [email protected] 

你可以看到[email protected]是舊的。這也意味着它沒有最新的ws:// websocket協議更新。

所以爲了解決這個問題,只需運行:

您正在使用哪個Socket.IO的版本?它們匹配的客戶端和服務器端
$> npm update socket.io express 
+0

謝謝!雖然它隨着它停止而開始工作......現在都很酷。 – corazza

相關問題