2017-05-06 2 views
0

Ich bin neu in Knoten und ich habe gespielt, während die Entwicklung einer App und so weit so gut. Ich verwende socket.io mit http-Server. Alle arbeiten wie erwartet, aber .... Ich habe eine Schaltfläche, die an den Socket emittieren und nach 10 Klicks bekomme ich eine Warnung über die Protokolle über das Ereignis Speicherleck erkannt und setMaxListeners. Bis jetzt sah ich auf anderen Fragen, ich muss die Hörer entfernen, nachdem emit anstelle der Abkürzung der Max Listeners erhöhen, aber ich habe versucht, ohne Erfolg.Entfernen Sie Hörer nach dem Ausstoßen auf Klick - Beratung auf Socket.io und Knoten

Mein Client-Seite Code wie folgt aussieht:

$(document).ready(function() {    
     $("#validate").click(function() { 
      socket.emit('stop', "validate button"); 
     }); 
    }); 

Auf der Server-Seite:

io.sockets.on('connection', function (socket) { 

    // WE RECEIVE stop 
    socket.on('stop', function (msg) { 
     console.log(msg);    
     clearInterval(refresh); 
    }); 
}); 

Wie kann ich den Hörer nach der Veranstaltung entfernen?

Alle Lichter werden geschätzt. Vielen Dank im Voraus

Antwort

1

nur um einmal die clientseitige Ereignis ausgelöst, da Sie jQuery verwenden, können Sie die one() Funktion wie folgt verwenden können:

$(document).ready(function() {  
     $("#validate").one('click', function() { 
       socket.emit('stop', "validate button"); 
     }); 
    }); 

Auf der Server-Seite, versuchen Sie dies:

io.sockets.on('connection', function (socket) { 
    // WE RECEIVE stop 
    socket.on('stop', stopHandler); 

    function stopHandler (msg) { 
     console.log(msg); 
     clearInterval(refresh); 
     socket.removeListener('stop', stopHandler); 
    } 
}); 
+0

Danke für die schnelle Antwort, aber es begrenzt den Klick auf eine Ausführung, das zweite Mal, wenn ich darauf klicke, es nicht an den Sockel emittieren und ich denke, dass der Hörer zu dem Ereignis sowieso hinzufügen. – Aramil

+0

Ich glaube, ich verstehe Ihr Problem jetzt besser, sehen Sie sich das Update an, das ich für meine Antwort vorgenommen habe. – rdgd

+0

Nochmals vielen Dank, dass die Listener entfernen, aber der Button wird nicht mehr funktionieren, ich meine, was ich erreichen will, ist zu vermeiden, fügen Sie Listener bei jedem Klick und vermeiden Sie die Speicherleckmeldung, die Taste wird mehrmals angeklickt, ohne zu entfernen Listener nach 10 Klicks werden eine Warnung über die MaxListeners sein, ich sehe keine Speichererhöhungen auf dem Server, aber diese Warnung sollte nicht auftauchen. Ich weiß nicht, ob es möglich ist, an den Socket zu emittieren, den Listener zu entfernen und auf eine neue Anfrage zu warten, dann wird ein neuer Listener hinzugefügt, emittiert und dann entfernt, macht es Sinn? – Aramil

Verwandte Themen