node状态计数

Node.js服务器状态监控

服务器维持状态集合,如果20秒内某个key的数值未达到20,则判定超时,如果达到20,则输出结果

服务器端代码(node server.js)

var http = require("http"),
    url  = require("url"),
    path = require("path"),
    qs   = require("qs"),
    fs   = require("fs");

var handle = {}
handle["/"]            = rootHandler;
handle["/add"]         = addHandler;

var g_table = {}

http.createServer(function (req, res) {
    var pathname=url.parse(req.url).pathname;
    if(typeof handle[pathname] === "function"){
    	handle[pathname](res, req);
    }
    else {
    	res.writeHead(404);
	res.write("<h1>404 Not Found</h1>");
	res.end();
    }
}).listen(8080, "0.0.0.0");

console.log("Server running at http://0.0.0.0:8080/");

//load Data
fs.readFile('status.save', function (err, data) {
    if (err) g_table = {};
    g_table = JSON.parse(data);
});


var i = 0
setInterval(function(){
    var now = Date.parse(new Date())
    for (var key in g_table){
    	if(g_table[key].ts < now - 20000){
	    console.log(key + " timeout");
	    delete g_table[key];
	}
    }
},1000);
setInterval(function(){
    fs.writeFile('status.save', JSON.stringify(g_table) , function (err) {
        if (err) throw err;
        console.log('It\'s saved!');
    });
},10000);

function rootHandler(res, req){
    for (var key in g_table){
    	res.write(key + ":" + g_table[key].val + "\r\n")
    }
    res.end(g_table.length);
}

function addHandler(res, req){
    if(req.method == 'POST'){
        var body = '';
        req.on('data', function (data) {
            body += data;
        });
        req.on('end', function () {
	    var POST = qs.parse(body);

	    if(g_table[POST.key]===undefined){
	    	g_table[POST.key] = {ts:Date.parse(new Date()),val:parseInt(POST.val)}
	    } else {
	        g_table[POST.key].val = parseInt(g_table[POST.key].val) + parseInt(POST.val)
	    }
	    if(g_table[POST.key].val > 20) {
	    	console.log(POST.key + ":" + g_table[POST.key].val);
	        delete g_table[POST.key];
	    }
	});
    }
    res.end("OK");
}

客户端(node client.js a 3)

var http = require('http'),
    qs = require('qs');

//The url we want, plus the path and options we need
var options = {
    host: '127.0.0.1',
    port: 8080,
    path: '/add',
    method: 'POST'
};

/*process.argv.forEach(function (val, index, array) {
    console.log(index + ': ' + val);
});*/

var k = (process.argv)[2];
var v = (process.argv)[3];
var postdata = qs.stringify({
key:k, val:v
});

var processPublicTimeline = function(response) {
	var body='';
	response.on('data', function (chunk) {
		body += chunk;
	});
	response.on('end',function() {
	        console.log(body);
        });
	response.on('error', function(e) {
		console.log('problem with request: ' + e.message);
	});
};

var req = http.request(options, processPublicTimeline);
req.write(postdata);
req.end();

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值