Голову сломал не пойму куда уже смотреть. Есть проект, крутиться на laravel + vue.js + soket.io. На сокете крутиться игра, длительное время все работает стабильно... В нормальном режиме посылается запрос через библиотеку AXIOS, LARAVEL формирует запись с игрой в БД отдает ее и сокет прокручивает игру.
И в хаотичном режиме происходит следующие, при старте игры сервер на сокетах черех axios дублирует запрос одномоментно
Вот что в логах nginx
127.0.0.1 - - [03/Aug/2021:14:41:33 +0000] "POST /api/bot/getGame HTTP/1.1" 200 1172 "-" "axios/0.21.1"
127.0.0.1 - - [03/Aug/2021:14:41:33 +0000] "POST /api/bot/getGame HTTP/1.1" 200 1172 "-" "axios/0.21.1"
вот часть кода
const startGame = () => {
let float = MULTIPLIER;
let _now_old = -1;
_i = 0,
_now = 0,
translateA = 1,
translateB = 0,
a = 0,
b = 0,
c = 0;
io.sockets.emit('stopTimer', 1);
const START_GAME_INTERVAL = setInterval(async () => {
_i++;
_now = parseFloat(Math.pow(Math.E, 0.00006 * _i * 1000 / 20));
if (_now_old.toFixed(2).toString() !== _now.toFixed(2).toString()) {
_now_old = _now;
if (parseFloat(_now.toFixed(2)) >= float) {
//check autoWithdraw and take
for (const [key, value] of Object.entries(AUTO_WITHDRAWS)) {
if (parseFloat(key).toFixed(2) == parseFloat(_now.toFixed(2))) {
console.log(_now.toFixed(2));
console.log(float.toFixed(2));
console.log(parseFloat(key).toFixed(2));
if (typeof AUTO_WITHDRAWS[key] !== "undefined") {
await withdrawAuto(key, AUTO_WITHDRAWS[key]);
}
}
}
clearInterval(START_GAME_INTERVAL);
io.sockets.emit('crashCrashed', MULTIPLIER);
await crashBets();
} else {
for (const [key, value] of Object.entries(AUTO_WITHDRAWS)) {
if (key <= parseFloat(_now.toFixed(2))) {
if (typeof AUTO_WITHDRAWS[key] !== "undefined") {
withdrawAuto(key, AUTO_WITHDRAWS[key]);
}
}
}
// if (translateA < 174.188) {
// translateA += 0.57396;
// }
// if (translateB < 174.188) {
// translateB += 0.58062666666;
// }
if (translateA < 142.188) {
translateA += 0.47396;
}
if (translateB < 140.188) {
translateB += 0.48062666666;
}
if (a < 55.016) {
a += 0.18438666666;
}
if (b < 128.370666667) {
b += 0.43790222222;
}
if (c < 181.393333333) {
c += 0.61464444444;
}
if (parseFloat(_now.toFixed(2)) > parseFloat(parseFloat(multipliers[3]).toFixed(2))) {
multipliers.shift();
multipliers.push(parseFloat(_now.toFixed(0)) + 3);
}
io.sockets.emit('crashMultiplier', {
multiplier: _now,
translateA,
translateB,
a,
b,
c,
multipliers
});
}
}
}, 50)
};
const getGame = () => {
return axios.post('getGame', {
secretKey: SECRET_KEY
})
.then(res => {
game = res.data.game;
bets = res.data.bets;
console.log(res);
io.sockets.emit('clearBets', res.data.history);
if (game.hash) {
io.sockets.emit('setHash', game.hash);
}
WITHDRAWS_MULTIPLIER = [];
AUTO_WITHDRAWS = [];
USER_WITHDRAWS = [];
multipliers = [1.00, 2.00, 3.00, 4.00];
if (game.status === 0) {
startTimer();
}
if (game.status === 1) {
startGame();
}
})
.catch(err => {
console.log(err);
setTimeout(async () => {
await getGame();
}, 3000);
});
};
const setStatus = (status) => {
axios.post('setStatus', {
secretKey: SECRET_KEY,
status: status
})
.then(res => {
if (status === 1) {
MULTIPLIER = res.data;
}
})
.catch(err => {
console.log(err);
});
};
const crashBets = () => {
return axios.post('crashBets', {
secretKey: SECRET_KEY
})
.then(res => {
setStatus(2);
bets = res.data;
io.sockets.emit('newBetsCrash', res.data);
setTimeout(async () => {
_i = 0, _now = 0;
await getGame();
}, 3000);
})
.catch(err => {
console.log(err);
});
};
const withdrawAuto = (multiplier, members) => {
if (typeof WITHDRAWS_MULTIPLIER[multiplier] === "undefined") {
WITHDRAWS_MULTIPLIER[multiplier] = 1;
//console.log(USER_WITHDRAWS);
return axios.post('autoTake', {
secretKey: SECRET_KEY,
members: members,
multiplier: multiplier,
autoWithdraws: USER_WITHDRAWS
})
.then(res => {
const result = res.data;
bets = result.bets;
io.sockets.emit('newBets', bets);
result.members.forEach(member => {
io.sockets.emit('successTake', {
win: member.win,
item: member.item,
newBalance: member.newBalance,
user_id: member.user_id
});
});
})
}
};