使用node.js,我試圖在每秒鐘將所有客戶端發送當前的server_time
。 因此,我想用setInterval()
向所有客戶發送一個事件併發送時間,但它不起作用。我是否在正確的地方定義了setInterval
函數,或者錯過了其他的東西?node.js setInterval不起作用
var http = require("http");
var socketIO = require('socket.io');
var connect = require('connect');
//keep track of every connected client
var clients = {};
//create Server
var httpServer = connect.createServer(
connect.static(__dirname)
).listen(8888);
//socket
var io = socketIO.listen(httpServer);
io.sockets.on('connection', function (socket) {
//add current client id to array
clients[socket.id] = socket;
socket.on('close', function() {
delete clients[socket.fd]; // remove the client.
});
//send news on connection to client
socket.emit('news', { hello: 'world' });
//this one works fine!
//send server time on connection to client
socket.emit("server_time", { time: new Date().toString() });
});
//this doesn't work!
// Write the time to all clients every second.
setInterval(function() {
var i, sock;
for (i in clients) {
sock = clients[i];
if (sock.writable) { // in case it closed while we are iterating.
sock.emit("server_time", {
console.log("server_time sended");
time: new Date().toString()
});
}
}
}, 1000); //every second
它不起作用的方式?有沒有錯誤或消息是不是發出? –
如果你刪除'console.log(「server_time sended」);'? – halex
把一個console.log放在你的setInterval函數的最上面(上面的var i,sock;)。我想你會發現它被調用的很好,但是你的客戶端數組是空的或者套接字是不可寫的。 – PherricOxide