2015-08-28 98 views
10

我有一个非常基本的例子。这个问题以前曾经多次在堆栈溢出中提出过,但是我无法得到正确的答案,所以我将使用这个基本示例。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> 

当我点击测试按钮我在第一次 socket.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) 

像这样它正在成倍增长。

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

回答

8

我认为你正在增加越来越多的听众来检查每个电话的'结果'。

第一次点击 - >打1周的console.log从电话监听器1

第二次点击 - >拨打电话从听众1 1周的console.log +从电话监听器1 2来电+的console.log调用2台来自呼叫2听众的日志

第三次 - >以前的日志+呼叫3 console.log来自呼叫1监听器+ call 3 console.log来自呼叫2监听器并呼叫3 console.log来自呼叫3监听器。

尝试把听众的“结果”出来的功能:

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

非常感谢dude.It的伎俩:-) – sdg