2015-01-07 50 views
5

在socket.io的博客說,在1.2.1版socket.io 1.2.1如何解決雙重事件後重新連接

「README修正,以防止在重新連接時的例子雙事件[@nkzawa ]「

我爲客戶端&服務器下載了1.2.1版本,但是在重新連接後它仍然調用兩次事件。 或者我應該使用自述文件做些什麼?

我試過這種方式重新連接,它的工作,但我可以用它來生產。它是不是很方便?

socket.disconnect() 
// remove socket object 
socket = undefined 
// connect again 
socket = io.connect({'forceNew':true}) 

正如我說的是正確的方式還是它有缺點?

UPDATE,增加的代碼

服務器端代碼

socket.on('client_emited', function(data){ 
    socketIO.to('this socket id').emit('server_emitted'); 
}) 

客戶端代碼

var socket; 
function connectSocket() { 
    if (!socket) 
    socket = io({'forceNew':true}); 
    else 
    socket.connect(); 
} 
socket.on('connect', function(){ 
    console.log('CONNECTED TO SOCKET.IO SERVER. SENDING "client_emited" EVENT'); 
    socket.emit('client_emited'); 
}); 
socket.on('server_emited', function(){ 
    console.log('RECEIVED "server_emited" EVENT'); 
}); 
socket.connect(); // here console shows 'CONNECTED TO SOCK...' and 'RECEIVED "server_e...' 1 time 
socket.disconnect(); 
socket.connect(); // here console shows 'CONNECTED TO SOCK...' 2 times and 'RECEIVED "server_e...' 4 times time 

服務器接收 「client_emit」 事件兩次

+0

的問題很可能在創建你的消息的事件處理程序的代碼。您需要確保您只是一次調用該代碼,或者在開始新代碼之前刪除事件處理程序。請告訴我們該代碼。 – jfriend00

+0

謝謝你的迴應,會在一分鐘內顯示 – onar

+0

先生,我正在修改代碼以使其理解,它將在2-3分鐘內完成。同時你能否寫下你對第二種方法的看法:首先解除連接,然後再移除socket對象。我可以使用它嗎? – onar

回答

6

將溶液是:

socket.on('connect', function(){....}); 

變化

socket.once('connect', function(){....}); 

欲瞭解更多信息,請閱讀issue on github

+0

Wooooooowww,thnx很多!這項工作對我來說 –

相關問題