Упрощенный пример кода, уточнение вопроса под ним.
var SUPERGLOBALVARIABLE = {
user228: {
wallet: {
RUB: 0,
EUR: 0,
USD: 0
}
},
user303: {
wallet: {
RUB: 100,
EUR: 0,
USD: 0
}
}
};
io.on('connect,'function(socket) {
//после магии с авторизацией выяснили что ид юзера 303, соответственно у коннекта будет 100 рублей на счету SUPERGLOBALVARIABLE['user' + '303'].wallet.RUB;
//два события: один на обмен евро, другой на обмен долларов. Обменивает он всегда по 1 единице валюты и всегда по заданному глобально курсу.
socket
.on('exchangeEUR', () => {
if (SUPERGLOBALVARIABLE['user' + '303'].wallet.RUB > 70)
SUPERGLOBALVARIABLE['user' + '303'].wallet.RUB -= 70;
SUPERGLOBALVARIABLE['user' + '303'].wallet.EUR += 1;
};
})
.on('exchangeUSD', () => {
if (SUPERGLOBALVARIABLE['user' + '303'].wallet.RUB > 65)
SUPERGLOBALVARIABLE['user' + '303'].wallet.RUB -= 65;
SUPERGLOBALVARIABLE['user' + '303'].wallet.USD += 1;
};
});
});
Дак вот вопрос, может ли хотябы теоретически случиться такая ситуация, что пользователь каким-то неведанным способом сможет на 100р успешно выполнить оба запроса ? Вследствии ддоса или еще чего-нибудь подобного.
Я надеюсь понятно, что выше предоставленна упрощенная версия логики и кода (на практике там больше вычислений и загрузки проца), но каких-либо асинхронных операций в самих событиях нет, только сами блокирующие вычисления. Просто сами сокеты это асинхранная штука(насколько я знаю), поэтому и такой вопрос.
Все данные, при запуске сервера, он загружает из базы и держит в оперативке, тоесть запросов в базу, в блоке события, тоже нет.