socket.io不刷新数据

时间:2017-09-27 17:09:34

标签: javascript node.js socket.io

我试图在每次文件更改时使用socket.io显示文件大小。这是我的js代码。

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', function(req, res){
    res.sendfile('index.html');
});
var fs = require("fs");
var filesize;
var filename = 'D:\\test.txt';

fs.watchFile(filename, function() {
    fs.open(filename, 'r', function(err, fd) {
        fs.stat(filename, function(err, stat) {
            if(err) { console.log('error');  }
            console.log(stat.size);
            filesize = stat.size;
        });
    })
});

io.on('connection', function(socket){
    console.log('A user connected');
    socket.emit('testerEvent', { description: prntarr});
    socket.on('clientEvent', function(data){
        console.log(data);
    });
    socket.on('disconnect', function () {
        console.log('A user disconnected');
    });

});

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

问题是,socket不刷新数据,但控制台显示更改的大小。只有在我重新加载页面时它才会刷新。请建议我在哪里犯错误以及如何解决它。

提前谢谢。

1 个答案:

答案 0 :(得分:2)

您需要在socket.emit()回调中执行fs.watchFile()。当文件目前发生变化时,您不会发出任何内容

  • 当用户连接时,将他的socket推入数组。
  • watchFile回调中,遍历连接的套接字数组和.emit()要发送的内容。
  • 别忘了从中删除 排列已断开连接的任何sockets