WebSocket入门教程(四)-- WebSocket实例:实时获取服务器内存使用情况(优化一)
websocket,优化2016-06-09
转载请标明出处:http://blog.csdn.net/u010136741/article/details/51590619, 本文出自: 柳木木_kylin
//send memory info per second
var WebSocketServer = require('ws').Server,
        wss = new WebSocketServer({port:8181});
var spawn = require('child_process').spawn;
var mem = {};
var clientMemUpdater = undefined;
function updateMemInfo(){
        var free = spawn('free',['-k']);
        free.stdout.on('data',function(data){
                var strdata = ""+data;
                console.log(strdata);
                //正则匹配,获取数据
                var re = /Mem: *(\d*) *(\d*) *(\d*) *(\d*) *(\d*) *(\d*)/;
                var result = strdata.match(re);
                if(result.length>0){
                        mem["total"] = parseInt(result[1]);
                        mem["used"] = parseInt(result[2]);
                        mem["free"] = parseInt(result[3]);
                        //mem["shared"] = parseInt(result[4]);
                        mem["buffers"] = parseInt(result[5]);
                        mem["cached"] = parseInt(result[6]);
                }
        });
}
updateMemInfo();
wss.on('connection',function(ws){
        var clientMemSend;
        var sendMemUpdates = function(ws){
                if(ws.readyState == 1){
                        ws.send(JSON.stringify(mem));
                }
        }
        clientMemSend = setInterval(function(){
                if(typeof clientMemUpdater == 'undefined'){
                        clientMemUpdater = setInterval(updateMemInfo,1000);
                }
                sendMemUpdates(ws);
        },1000);
        sendMemUpdates(ws);
        if(typeof clientMemUpdater == 'undefined'){
                clientMemUpdater = setInterval(updateMemInfo,1000);
        }
        ws.on("close",function(){
                if(typeof clientMemSend != 'undefined'){
                        clearInterval(clientMemSend);
                }
                if(typeof clientMemUpdater !='undefined'){
                        clearInterval(clientMemUpdater);
                        clientMemUpdater = undefined;
                }
        });
});