计算服务器服务请求的简单方法是什么?

在一个简单的nodejs服务器中,我想跟踪它在每个客户端上每秒处理多less个请求。

我应该使用数据库吗? 或者会导致某种types的locking?

如果您只是想即时了解最近一次的请求数量,您可以创build自己的内存数据结构来跟踪计算所需的数据。 我没有理由为此使用数据库:

如果您使用的是Express,则可以将您注册的第一个中间件作为收集请求数据的中间件:

// collect request info var requests = []; var requestTrimThreshold = 5000; var requestTrimSize = 4000; app.use(function(req, res, next) { requests.push(Date.now()); // now keep requests array from growing forever if (requests.length > requestTrimThreshold) { requests = requests.slice(0, requests.length - requestTrimSize); } next(); }); 

现在,您有一组数据logging了您最近N次请求的时间,并且您可以计算最近任何时间段内的最近请求数/秒。

只要确保这个中间件是首先安装的,所以它在任何其他可能实际结束请求的中间件之前被处理(所以总是被调用)。

当然,如果你想收集更多的信息,而不仅仅是请求的时间,而不是把时间戳推入数组中,你可以创build一个对象并将对象推入数组中。 该对象可以有一个timestamp属性和你希望的任何其他属性(请求的URL,请求的typesGET,POST等,请求的IP地址等)。


那么,如果你想知道在最后一刻有多less请求,你可以这样计算:

 app.get("/requests/minute", function(req, res) { var now = Date.now(); var aMinuteAgo = now - (1000 * 60); var cnt = 0; // since recent requests are at the end of the array, search the array // from back to front for (var i = requests.length - 1; i >= 0; i--) { if (requests[i] >= aMinuteAgo) { ++cnt; } else { break; } } res.json({requestsLastMinute: cnt}); }); 

如果你通过键入运行你的PM2服务器

pm2 monit

看左边angular落你会看到自定义指标,从那里你可以观看每分钟服务器自定义指标的请求