まめしみ

やったことを淡々と書く


 

当然のことながらアプリを再起動すると変数が初期化されます。
Bear : まめしみGAMEでは累計アクセス数をリセットしたくないので変数の値をファイルに保持して永続化してみました。

app.jsから抜粋

//import
var express = require('express');
var app = module.exports = express.createServer()
var io = require('socket.io').listen(app);-
var fs = require('fs');

var totalFile = __dirname + '/tmp/total.txt';
var total = function(){
    var ret = 0;
    //ここは起動時の処理なので同期処理を使用する
    //一度a+モードで開く。
    //ファイルがなければファイルが作成される。
    var fd = fs.openSync(totalFile, 'a+');
    fs.closeSync(fd);
    //totalファイル読み込む。
    data = fs.readFileSync(totalFile, 'utf-8');
    if(data){
        ret = parseInt(data);
    }
    return ret;
}();

//イベント
io.sockets.on('connection', function(socket){
    total++;
    //totalファイルに記録しておく
    fs.writeFile(totalFile, ''+total, function(err){
        if(err){
            throw err;
        }
    });
}

起動したときに変数totalの値をファイルから読み込んでいます。

コメントにも書いてありますが起動時の処理なので同期処理にしています。
ここで非同期にするメリットは何もありません。
totalの値を確定させることが大事。

connectionイベントでtotalをインクリメントしてファイルに書き込むようにします。

 

DBを使うよりお手軽に永続化できます。

 

You can leave a response, or trackback from your own site.

Leave a Reply