我正在使用nodejs
0.12.2
和express.js 4
以及async
waterfall
流来处理同步功能。
在redis
和Elasticache
上使用Dynamodb
的数据库网站上。
我正在使用pm2
模块进行线程化和部署。
代码在Centos6
上的AWS
ec2
ELB
上运行,同时也使用ELB
的自动缩放功能。
我的代码完全适用于200请求/分钟的低流量,但当我将服务器上的流量增加到10000请求/分钟时,我收到504 GATEWAY_TIMEOUT
错误。
我的示例代码如下。
routes/idex.js
var express = require('express');
var async = require('async');
var router = express.Router();
var url = require('url');
// other require variables
router.get('/', function (req, res, next) {
try {
var rd = JSON.parse(query.hit);
if (rd === false && typeof rd !== "object" && rd === null) {
next();
}
} catch (e) {
}
async.waterfall([
function (next) {
next(null, rd);
},
func1,
func2
], function (err, result) {
});
response["d"] = "d";
res.json(response);
}); // eof route
module.exports = router;
function func1(rd, next) {
var gd = {
var1: rd.var1
};
gd.var2 = false;
common.callback1(gd.var2, function (x) {
gd.var2 = session_id || false;
if (gd.var2 === false || !gd.var2) {
common.setVar(varData);
}
next(null, gd);
});
} // EOF func1
function func2(gd, next) {
// looping synchronously
async.eachLimit(gd.vars4, 1, function (var4, callback) {
async.waterfall([
function (inner_callback) {
common.cb1(domain, function (si) {
inner_callback(null, si);
});
},
function (si, inner_callback) {
common.cb2(si, sub_domain, function (si) {
inner_callback(null, si);
});
},
],
function (err, si) {
callback();
});
}); // eof for loop
next(null, "true");
}