socket.io发出多次

我有一个非常基本的例子。这个问题之前已经被多次询问了堆栈溢出本身,但我无法得到正确的答案,所以我正在用这个基本的例子。

服务器:

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 }); }); }); 

客户:

 <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> 

当我第一次单击testing我buttonsocket.emit('结果',{你好:'世界'}); 它被发射一次。而在控制台,我正在得到这个打印

 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) console.log('The data is '+data) console.log('The data is '+data) console.log('The data is '+data) console.log('The data is '+data) 

像这样,它正在成倍增长

任何人都可以请给我关于如何解决这个问题的见解。 非常感谢您的帮助。谢谢

我认为你要增加越来越多的听众来检查每个电话的“结果”。

第一次单击 – >从调用1侦听器调用1 console.log

第二次单击 – >从调用1监听器调用1 console.log +从调用1监听器调用2 console.log +从调用2监听器调用2 console.log

第三次 – >以前的日志+调用3来自调用1监听器的console.log +调用3来自调用2监听器的console.log并从调用3监听器调用3 console.log。

尝试把“结果”的监听器放在函数之外:

 <html> <body> <button onclick="check()">Test Me :-)</button> <script src="/socket.io/socket.io.js"></script> <script> var socket = io.connect('http://localhost:3000'); socket.on('result', function(data){ console.log('The data is '+data) }) var check = function(){ var data = { id : '234'}; socket.emit('chat', data); } </script> </body> </html>