Я настраиваю новое приложение для длинных опросов сообщений с интервалом в 10 секунд от AWS sqs. Я пытался проверить это. И после 80 пользователей, которые ожидают своих запросов, задержка начала расти и достигла 15 секунд и достигла 30 секунд с 300 пользователями. Что-то не так с моим кодом или у aws есть какие-то настройки для него?
const port = process.env.PORT || 3001;
const express = require('express');
const app = express();
const AWS = require('aws-sdk');
AWS.config.update({region: 'eu-west-1'});
const MD5 = function(d){<md5function>}
const sleep = (waitTimeInMs) => new Promise(resolve => setTimeout(resolve, waitTimeInMs));
const SQS = new AWS.SQS({
region: 'eu-west-1'
});
const LONG_POLL_TIMEOUT = 10;
async function checkQueue(req, res) {
const {version, token} = req.params;
const auth = req.query.auth;
if (!isTokenValid(token, auth)) {
await sleep(LONG_POLL_TIMEOUT * 1000);
res.send()
} else {
getUpdateMessage(version, token, res);
}
}
function getUpdateMessage(version, token, res) {
const urlParams = {
QueueName: `_version-queue-${version}-${token}`
};
SQS.getQueueUrl(urlParams, (urlErr, urlData) => {
if (urlErr) {
res.status(204).send();
} else {
const messageParams = {
QueueUrl: urlData.QueueUrl,
WaitTimeSeconds: LONG_POLL_TIMEOUT,
};
SQS.receiveMessage(messageParams, (err, data) => {
if (err) {
res.status(204).send();
} else {
if (data.Messages) {
res.send(data.Messages[0].Body);
SQS.deleteMessage({
QueueUrl: urlData.QueueUrl,
ReceiptHandle: data.Messages[0].ReceiptHandle
}, (err1, data) => {
if (err1) {
}
});
} else {
res.send();
}
}
});
}
});
}
function isTokenValid(token, auth) {
// check against tokens for last 14 days
let dayNumber = Math.ceil(Date.now() / (24 * 3600 * 1000));
for (let i = 0; i < 14; i++) {
const stringToHash = `<string>`;
if (MD5(stringToHash) == auth) {
return true;
}
dayNumber--;
}
return false;
}
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
next();
});
app.get('/versions/:version/long_poll_updates/:token', function (req, res) {
checkQueue(req, res);
});
app.get('/check', function (req, res) {
res.send('I\'m ok!');
});
app.use((req, res) => {
res.status(404).send("Sorry, that route doesn't exist. Have a nice day :)");
});
app.listen(port, () => {
console.log('Server running at http://127.0.0.1:' + port + '/');
});
Загрузка ЦП составила менее 10 процентов.