【发布时间】:2016-11-05 02:04:22
【问题描述】:
我有一个 json 文件,它由服务器上的应用程序每 30 秒更新一次。我已经为 nodejs 编写了一个小型服务器脚本,以通过 websocket (socket.io) 提供这个 json 文件,如下所示。
var app = require('http').createServer();
var io = require('socket.io')(app);
var fs = require('fs');
app.listen(8081, '127.0.0.1');
io.on('connection', function(socket) {
fs.readFile('/tmp/live-info', 'utf8', function (err, data) {
if (err) throw err;
firstDataObj = JSON.parse(data);
socket.emit('alert', firstDataObj );
});
});
var prObj;
setInterval(function(){
fs.readFile('/tmp/live-info', 'utf8', function (err, data) {
if (err) throw err;
data = JSON.parse(data);
scTime = data.schedulerTime;
delete data.schedulerTime;
if (JSON.stringify(prObj) !== JSON.stringify(data)) {
prObj = data;
console.log(prObj.current.name, io.engine.clientsCount);
prObj.schedulerTime = scTime;
io.emit('alert', prObj );
delete prObj.schedulerTime;
} else {
console.log("No change", prObj.current.name, "Total connections: ", io.engine.clientsCount);
}
});
}, 21100);
如您所见,脚本会定期检查 json 文件的更改,如果检测到内容(时间戳除外)发生更改,则会发出解析的对象。
我正在使用 pm2 管理服务器上的 nodejs 进程。一切正常,但我在日志中反复收到以下错误
SyntaxError: Unexpected end of JSON input
at Object.parse (native)
at /var/www/scheduleio/server.js:15:25
at tryToString (fs.js:449:3)
at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:436:12)
在客户端上也没有发现明显的中断。但是,我想了解如何修复此错误,因为我每天在日志中收到大约 200 个错误,以及是否可以以任何方式增强脚本(因为这是我的第一个此类脚本)。
【问题讨论】:
标签: json node.js socket.io fs pm2