nodeJS setinterval不会退出回调

问题描述:

我正在写一个包含setInterval函数的socket.io程序。 但是我一直得到错误的答案,然后我用2个计数器写了一个基本设置,一个客户端和一个服务器端必须每隔500ms刷新一次,但只有客户端在控制台中记录数据。就像setInterval保持其他代码不运行一样。nodeJS setinterval不会退出回调

这里是代码

服务器。

io.on('connect', function(socket){ 
     console.log("test"); 

     io.sockets.on('count', function (data) { 
      console.log(data); 
     }); 

    setInterval(function(){var count=0; 
     for (i = 0; i < 10; i++) { 
      count = count + 1; 
      socket.emit('count', count); 
     }},500); 
});` 

客户

<script> 
    var socket = io(); 
    var count=0; 

    socket.on('count', function (data) { 
      console.log(data); 
     }); 
    for(i=0;i<10;i++){ 
     count = count +1; 
     socket.emit('count',count); 
    } 

    </script> 

我知道我必须在事后清理我的setInterval但是这个代码只是为了测试的原因

请找到在日志中一些细节相同的解决方案: - server.js

var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 

app.get('/', function(req, res){ 
    res.sendFile(__dirname + '/index.html'); 
}); 

io.on('connection', function(socket){ 
    socket.on('count', function(data){ 
    // client message will be logged here 
    console.log(" client message " + data); 
    }); 

    setInterval(function(){var count=0; 
    for (var i = 0; i < 10; i++) { 
     count = count + 1; 
     socket.emit('count', " server count " + count); 
     console.log(" server message " + count); // this i server message sent to client 
    }},500); 
}); 

http.listen(3000, function(){ 
    console.log('listening on *:3000'); 
}); 

and client script

var socket = io();

// Add a connect listener 
    socket.on('connect',function() { 
    console.log('Client has connected to the server!'); 
    }); 
    // Add a disconnect listener 
    socket.on('disconnect',function() { 
    console.log('The client has disconnected!'); 
    }); 

    var count=0; 

    socket.on('count', function(data){ 
    console.log("server message" + data); // this is message come from server 
    }); 

    for(var i=0;i<10;i++){ 
    count = count +1; 
    socket.emit('count',count); // client sends this information to server. 
    } 

你的解决方案是正确的,但请注意,当客户端发出的消息,它将显示节点终端或控制台和服务器时发出那么这将是浏览器的控制台上可见。

希望这会帮助你。

+0

我在服务器上看不到{console.log(“client message”+ data);} – brabant

+0

//这是服务器端的客户端消息 io.sockets.on('count',function(数据){ console.log(data); }); –

+0

是的,但不应该记录在我的nodeJs控制台上? – brabant