Обновление действий на экспресс-сервере каждый короткий промежуток времени - PullRequest
0 голосов
/ 26 октября 2018

В настоящее время я разрабатываю игровой сайт, построенный на основе блокчейна Ethereum. Поскольку запись всех ставок, сделанных игроком, очень сложна (поскольку они могут сделать ставку, даже не посещая веб-сайт, напрямую взаимодействуя с блокчейном), я пришел к выводу, что мне нужна функция на моем сервере, которая будет выполняться каждые 0,5 - 1 минуту и ​​загрузите все новые ставки, поступившие из блокчейна, и затените их в моей базе данных (да, мне нужно, чтобы они также были в моей базе данных).

Я не слишком опытен со всеми этими бэкэндами, я где-то читал, что могу использовать функцию setInterval (30 секунд) на сервере и запускать ее при запуске сервера. Но это реальный вариант? Люди даже делают такие вещи? Не будет ли бесконечная функция, работающая каждые 30 секунд, просто забивать весь сервер?

1 Ответ

0 голосов
/ 26 октября 2018

Я делал подобное несколько раз без проблем. События будут просто поставлены в очередь и будут проходить по мере необходимости. Тем не менее, одна вещь, которую следует с осторожностью:

const timeout = 1000;
setInterval(() => {
    // some process that takes longer than timeout
}, timeout);

Когда вы пишете что-то вроде этого, setInterval запустится снова после истечения времени ожидания, даже если первая операция еще не завершена. Это может легко привести к блокировке вашей темы. Вместо этого я предпочитаю использовать setTimeout для достижения этой цели:

const timeout = 1000;
const withTimeout = () => {
    // some process that takes longer than timeout
    setTimeout(withTimeout, 1000);
}

Таким образом, ваш второй вызов withTimeout ставится в очередь только ПОСЛЕ первого запуска выполнения. С помощью этого механизма вы не получаете свои операции строго каждый тайм-аут период, а скорее тайм-аут ПОСЛЕ последнего.

...