2015-01-07 4 views
5

In socket.io Blog sagt, dass in der Version 1.2.1socket.io 1.2.1 Wie doppelte Ereignisse beheben, nachdem wieder

„Readme fixes Doppelereignis im Beispiel bei Wiederverbindung zu verhindern [@nkzawa ] "

Ich habe die Version 1.2.1 für den Client & Server heruntergeladen, aber nach dem erneuten Verbinden ruft sie immer noch Ereignisse zweimal auf. Oder sollte ich etwas mit Readme-Datei tun?

Ich habe versucht, auf diese Weise wieder zu verbinden und es hat funktioniert, aber kann ich es für die Produktion verwenden. Ist es der richtige Weg?

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

Wie gesagt, ist es richtig oder hat es Nachteile?

UPDATE- Code hinzugefügt

Server-seitigen Code

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

Client-Seite Code

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 

und der Server empfängt "client_emit" Ereignis zweimal

+0

Das Problem in dem Code wahrscheinlich ist, dass Ihre Nachricht Event-Handler erstellt. Sie müssen sicherstellen, dass Sie diesen Code nur EINMAL aufrufen, oder Sie entfernen die Ereignisbehandlungsroutinen, bevor Sie neue starten. Bitte zeigen Sie uns diesen Code. – jfriend00

+0

danke für die Antwort, wird in einer Minute – onar

+0

Sir Ich korrigiere Code, um verständlich zu machen, wird es in 2-3 Minuten sein. während könntest du deine meinung über die zweite methode schreiben: zuerst desconnect, remove socket object ren connect wieder. Kann ich es benutzen? – onar

Antwort

6

Die Lösung ist:

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

Änderung

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

Für weitere Informationen lesen Sie die issue on github

+0

Wooooooowww, Thnx viel !! das funktioniert für mich –

Verwandte Themen