サーバー上のアプリケーションによって30秒ごとに更新されるjsonファイルがあります。私は以下のようにwebsocket(socket.io)上でこのjsonファイルを提供するnodejs用の小さなサーバースクリプトを書いています。nodejs websocketスクリプトのfsモジュールで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をログに記録しています。もしスクリプトが何らかの方法で拡張されていれば(これが私の最初のスクリプトなので)