2017-11-11 5 views
0

Ich teste socket.io und tun öffnete eine einfache Chat-Nachricht (nach dem Tutorial in der offiziellen Website)Socket.io emittieren Duplikat auf dem zweiten Fenster

I 2 Fenster:

Wenn ich emittieren die Ereignis im ersten Fenster geöffnet, es ist ok.

Aber, wenn ich das Ereignis im zweiten Fenster ausstrahle, sende das Ereignis 2 mal (dupliziert).

PS: wenn ich ein drittes Fenster zu öffnen, das die Veranstaltung 3 mal senden

Node.js Code:

router.get('/', function(req, res, next) { 

res.render('index', { title: 'Express' }); 

io.on('connection', function(socket) { 
    socket.on('chatMessage', function(msg){ 
    io.emit('chatMessage', msg); 
    }); 
}); 
}); 

Kunde:

methods: { 
    sendMessage: function() { 
    socket.emit('chatMessage', this.text); 
} 


socket.on('chatMessage', function(msg){ 
console.log('Client side message: ' + msg) 
vmIndex.messages.push(msg); 
}); 
+1

Dies liegt daran, dass Sie jedes Mal einen Verbindungs-Listener erstellen, wenn jemand die Route "/" aufruft. Versuchen Sie, den socket-io-Code außerhalb der "/" route-Funktion zu verschieben. –

+0

danke. ist es!! füge die Antwort hinzu und markiere als gelöst –

Antwort

1

Es ist, weil Sie‘ Er erstellt jedes Mal einen Verbindungs-Listener, wenn jemand die Route '/' aufruft. Versuchen Sie, den Socket-IO-Code außerhalb der '/' Routenfunktion zu verschieben.

1

Verschieben Sie Ihren Verbindungslistener wie von Eric erwähnt außerhalb der Route /, um zu verhindern, dass er jedes Mal erstellt wird, wenn jemand die Seite besucht.

router.get('/', function(req, res, next) { 
res.render('index', { title: 'Express' }); 
}); 

io.on('connection', function(socket) { 
    socket.on('chatMessage', function(msg){ 
    io.emit('chatMessage', msg); 
    }); 
}); 
Verwandte Themen