Socket.io feuern mehrere Ereignisse
Buchse.io zu sein scheint, brennen mehrere Nachrichten exponentiell, hier ist ein Beispiel, das ich gelaufen bin, die das Problem verursacht.
Client-Seite:
<html>
<head>
<script type="text/javascript" src="../../js/jquery191.min.js"></script>
<script type="text/javascript" src="http://192.168.1.2:8887/socket.io/socket.io.js"></script>
</head>
<body>
<button>Click Me!</button>
<script type="text/javascript">
$(document).ready(function(){
var socket = io.connect('http://192.168.1.2:8887');
$("button").click(function(){
console.log("Emitting test_parent");
socket.emit('test_parent');
socket.on('test_parent_server', function(data){
console.log("Handling test_parent_server");
console.log("Emitting test_child");
socket.emit('test_child');
socket.on('test_child_server', function(ing){
console.log("Handling test_child_server");
});
});
});
});
</script>
</body>
</html>
Server-Seite:
socket.on("test_parent", function(){
socket.emit("test_parent_server", { data : " " });
});
socket.on("test_child", function(){
socket.emit("test_child_server", { data : " " });
});
Aus irgendeinem Grund jedes mal, wenn die Schaltfläche geklickt wird, die Ereignisse gefeuert mehrmals, steigt exponentiell. Ich habe versucht herauszufinden, was eigentlich Los ist, aber kein Glück Debuggen oder online-Suche.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Jedes mal, wenn Sie den click-handler aufgerufen wird, legt es die zusätzliche event-Listener für socket. Die Zuhörer, die Sie an der vorherigen Klicks aktiv bleiben. Sie müssen entweder start mit removeListener oder removeAllListeners entfernen von alten Hörer, oder Sie müssen den Zuhörer zu bewegen von code außerhalb der click-handler so, dass er nicht mehrfach aufgerufen wird.
Beispiel: