在为多个用户与应用程序交互的应用程序创建dynamodb实例时,我遇到了问题。我是应该在程序加载并拥有客户端时创建它,还是应该将它放到调用数据库的路由中,这样每个对登录路由的请求都会创建一个实例?
var express = require('express');
var app = express();
var AWS = require('aws-sdk');
AWS.config.update({
region: "us-west-2",
endpoint: "http://localhost:8000"
});
//Is this the right place. Outside of where the database call is being made
var dynamodbDoc = new AWS.DynamoDB.DocumentClient();
app.post('/login', function (req, res) {
//OR should I create a new instance of AWS.DynamoDB.DocumentClient() here every time a request is made?
// var dynamodbDoc = new AWS.DynamoDB.DocumentClient(); ????
var login_username = req.body.login_username;
var login_password = req.body.login_password;
var params = {
TableName : "Users",
Key: {
'username': login_username,
'password': login_password
}
};
dynamodbDoc.get(params, function(err, data) {
if (err) console.log(err);
else console.log(data);
});
});
var server = app.listen(3000, function () {
var host = server.address().address;
var port = server.address().port;
console.log('Example app listening at http://%s:%s', host, port);
});发布于 2015-11-19 23:05:25
从文档中看起来,请求将使用节点默认的http连接池(假设不是100%)发出。
amazon sdk允许您使用自己的代理对其进行配置,并指定池的此大小。
https://nodejs.org/api/http.html#http_new_agent_options
这应该是可以连接到amazon sdk的连接数量的上限。以下代码由node http和amazon node sdk文档拼凑而成,未经测试,可能不完全准确:
var http = require('http');
var dynamoAgent = new http.Agent({maxSockets: 20})
AWS.config.update({
region: "us-west-2",
endpoint: "http://localhost:8000",
httpOptions: {
agent: dynamoAgent
}
});这将允许您拥有一个包含20个套接字的池。我不确定maxSockets的细微差别,(如果套接字可用,请求会阻塞吗?套接字如何重用?如何保持存活?等)。
20个是任意的,你的应用程序数量可能需要摆弄一下,看看哪个效果最好。
节点全局代理默认的最大套接字数量是无限的,如果post端点上的流量非常大,这个数量可能会太多。限制连接的数量可能更明智。
https://stackoverflow.com/questions/33796887
复制相似问题