Ho un esempio molto semplice. Questa domanda è stata posta in precedenza più volte nello stesso overflow dello stack, ma non ho potuto ottenere la risposta giusta, quindi vado con questo esempio di base.socket.io emette più volte
Server:
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(3000);
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});
io.on('connection', function (socket) {
socket.on('chat', function (data) {
var op = false;
if(data.id == '1234'){
op = 'yes';
}else{
op = 'no';
}
socket.emit('result', { hello: op });
});
});
Cliente:
<html>
<body>
<button onclick="check()">Test Me :-)</button>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost:3000');
var check = function(){
var data = { id : '234'};
socket.emit('chat', data);
socket.on('result', function(data){
console.log('The data is '+data)
})
}
</script>
</body>
</html>
Quando clicco il tasto di prova mi ha per la prima volta socket.emit ('risultato', {ciao: 'mondo'}) ; viene emesso una volta. E nella console sto ottenendo questo stampato:
console.log('The data is '+data)
Ma quando clicco ancora una volta ottengo questo stampato tre volte:
console.log('The data is '+data)
console.log('The data is '+data)
console.log('The data is '+data)
Quando clicco per la terza volta vengo stampato sei volte:
console.log('The data is '+data)
console.log('The data is '+data)
console.log('The data is '+data)
console.log('The data is '+data)
console.log('The data is '+data)
console.log('The data is '+data)
Come questo si sta moltiplicando e andando.
Qualcuno può darmi l'intuizione su come risolvere questo problema. Il tuo aiuto è molto apprezzato. Grazie!
Grazie molto dude.It fa il trucco :-) – sdg