2012-08-13 199 views
1

我正在做一個應用程序,我需要將套接字映射到某個對象。我以爲我會安全使用Socket.IO提供的socket.id變量。不幸的是,在調試的時候,我發現socket.id沒有被客戶端斷開/重新連接或者其他東西而改變。Socket.IO socket.id更改爲同一客戶端,無需重新連接

這裏有一小塊代碼來顯示我想要做的事:

var io   = require('socket.io').listen(8080), 
var myVariable = new Array(); 

// Main event loop 
io.sockets.on('connection', function (socket) { 
    socket.on('myEvent', function(data) { 
     myVariable[socket.id] = data; 
    } 
    // 'someOtherEvent' which uses the mapped data. 
    socket.on('someOtherEvent', function(data) { 
     // Doesn't always work because socket.id has changed and var is empty 
     doSomethingWith(myVariable[socket.id]); 
    } 
}); 

我不知道,但我不認爲這是預期的效果。爲什麼會發生這種情況,我將如何解決這個問題?

回答

4

我正在使用node-inspector來調試我的應用程序,並且因爲我在某斷點處持有代碼,所以斷開了客戶端連接(可能是某個超時客戶端)。這就是爲什麼當我繼續執行代碼時,我得到了一個新的socket.id。

0

看起來像'someOtherEvent'之前'myEvent'或套接字已重新連接。我使用socket.id作爲生產中兩個不同項目的連接標識符,並且它沒有任何問題。

+0

不是這樣。代碼示例可能不夠清楚,但只有一個事件觸發了socket.id。最大的問題是使用相同的客戶端,而不重新連接socket.id更改。 – 2012-08-14 07:21:31

相關問題