【问题标题】:nodeJS setinterval doesn't exit callbacknodeJS setinterval 不退出回调
【发布时间】:2016-03-07 22:38:48
【问题描述】:

我正在用 socket.io 编写一个包含 setInterval 函数的程序。 但是我一直得到错误的答案,然后我编写了一个基本设置,其中有 2 个计数器,一个客户端和一个服务器端必须每 500 毫秒刷新一次,但只有客户端在控制台中记录数据。这就像 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,但这段代码只是出于测试原因

【问题讨论】:

    标签: node.js socket.io setinterval


    【解决方案1】:

    请在日志中找到包含更多详细信息的相同解决方案:- 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.
      }
    

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

    希望这会对你有所帮助。

    【讨论】:

    • 我的服务器上没有看到 {console.log("client message" +data);}
    • // 这是服务器端的客户端消息 io.sockets.on('count', function (data) { console.log(data); });
    • 是的,但这不应该在我的 nodeJs 控制台上登录吗?
    • 是的,它会登录到 nodeJs 控制台,但不会登录到浏览器控制台。我写了上面的代码来帮助你理解客户端信息将被传递到服务器,这就是为什么我放了 console.log("client message"),如果你想了解更多关于这一点的信息,请告诉我。
    • 我在每次日志后都更新了评论,如果您对此有任何问题,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多