2016-03-07 21 views
0

我正在寫一個包含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但是這個代碼只是爲了測試的原因

回答

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

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