Хорошо, теперь я создаю веб-приложение VueJS + Laravel. Моя основная функция для приложения - когда оно достигает определенного времени (startTime), пользователь сможет нажать кнопку и сохранить разницу времени между нажатием кнопки и startTime в базе данных. Примечание: одновременно будет отправлено около 25 пользователей, которые спамят кнопку записи. Каждый пользователь может сделать запись только один раз. Тот, у кого самая короткая разница во времени, победит в конкурсе.
В настоящее время я подумал о двух способах,
(i) Используйте javascript Date.now (), чтобы получить текущее время и вычесть его по времени начала, а затем отправить timeDiff из внешнего интерфейса в внутренний. Это быстро, но Date.now () зависит от системного времени клиента, которое, если пользователь изменяет свое системное время, может рисовать раньше или позже, так как это не имеет значения, если время совпадает со временем начала.
(ii) Все обрабатывается в бэкэнде. Временная метка будет генерироваться на сервере каждый раз, когда пользователь нажимает кнопку записи. У него нет проблемы (i), но из-за производительности Laravel похоже, что сервер останавливает запрос, что делает временную метку неточной.
Любые предложения или советы? Я все еще новичок во всем этом, и это 2 метода, о которых я могу думать прямо сейчас.
if(auth()->user()->recorded !== 1){ //check if recorded
//create timestamp in epoch
$pressTime = microtime(true)*1000;
$offTimeStart = $user->startTime;
$offTimeEnd = $user->endTime;
$pressedTime = $user->pressTime;//initially 999999999
//prevent user spamming record btn
if($pressTime > $pressedTime){ return something;}
//check if still within the range
if($pressTime >= $offTimeStart && $pressTime < $offTimeEnd){
if($user != null){
$user->update([
'pressTime' => $pressTime,
'recorded' => 1
]);}