2013-10-03 37 views
0

我使用socket.io用Node.js和受socket.io的最新版本顯示了一個奇怪的現象: 客戶端上的連接事件觸發,但不在服務器上第一次。 重載後或簡單地加載頁面再次事件得到了兩個發射 - 正確的一面 - 客戶端和服務器。 有什麼不對(用我的代碼?)?Socket.io火災連接事件只是之後的第二連接

// Client 
var socket = io.connect(window.location.protocol + '//' + window.location.hostname, { 
    'sync disconnect on unload': true 
}); 

socket.on('connect', function() { 
    alert("Connect"); 
    // Do other stuff 
}); 

-

// Server 
io.sockets.on('connection', function(socket) { 
    console.log("connection"); 

    io.sockets.on('connect', function(socket) { 
     console.log("connect"); 
    }); 
}); 

啓動服務器,並加載頁面: 客戶端觸發警報,服務器只是記錄connection。現在再次加載頁面,它會記錄connectionconnect

更新: 似乎只是第一個連接有這樣的問題,後來它的工作原理無處不預期。在每個節點服務器(重新啓動)之後,就會出現該行爲。 注:節點本身提供了其中使用socket.io的頁面和工作,甚至在第一次請求,所以節點問題應該被排除在外呢。 瀏覽器也無所謂,每個瀏覽器都是一樣的。

回答

0

對於Socket.IO,connection是客戶端的服務器端對等connect。因此,當你在回調的connection事件中,插座已經建立的連接,你不需要聽一些其他事件。我不確定服務器端的connect是什麼,但它沒有記錄並且不起作用。

// on the server 
io.sockets.on('connection', function(socket) { 
    // this connection has already been established 
    // no other handler is required 
}); 

// on the client 
var socket = io.connect(); 
socket.on('connect', function() { 
    // the connection has been established 
});