nodeJS setinterval不会退出回调

时间:2016-03-07 12:31:56

标签: node.js socket.io setinterval

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

这是代码

服务器。

>> @formula.operands.all
=> #<ActiveRecord::AssociationRelation []>
>> @formula.operands.first
=> nil
>> params
=> {"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>"--TOKEN--", "formula"=>{"name"=>"Sdfg", "operands_attributes"=>{"1457352032591"=>{"operator"=>"+", "numeric_operand"=>"3"}}}, "commit"=>"Update Formula", "action"=>"update", "controller"=>"formulas", "locale"=>"en", "id"=>"3"}
>>

客户端

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

我知道我之后必须清理我的setInterval,但这段代码只是出于测试原因

1 个答案:

答案 0 :(得分:0)

请在日志中找到相同的解决方案以及更多详细信息: - 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');
});

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

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

希望这会对你有所帮助。