好,现在我要构建一个VueJS + Laravel Web应用程序。我对应用程序的主要功能是,当到达特定时间(开始时间)时,用户将能够单击按钮,并将用户按下按钮的时间与开始时间之间的时间差存储到数据库中。注意:大约有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
]);}