服务器维持状态集合,如果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();