已关闭,此问题为opinion-based。目前不接受答复。
**想改善这个问题吗?**更新问题,以便editing this post可以用事实和引用来回答。
2天前关闭。
Improve this question
有一个小测验,总共有250个问题。问题将保持不变,所以我不会从数据库中提取每个问题,但为了提交每个问题,我使用 AJAX 发送2个请求:1-请求开始计算用户应答所需的持续时间。2-请求提交用户的答案。
如果用户没有在特定的时间内提交答案,它会自动提交。
示例HTML:
<h3>Question 1</h3>
<span class="answer" data-ans="1" data-q="1">Answer 1</span>
<span class="answer" data-ans="2" data-q="1">Answer 2</span>
<span class="answer" data-ans="3" data-q="1">Answer 3</span>
<span class="answer" data-ans="4" data-q="1">Answer 4</span>
AJAX 开始计数:
$.ajax({
url: 'http://exmaple.com/start-counting',
type: 'GET'
});
QuizController.php:
public function start_counting()
{
session(['start' => time()]);
session()->save();
}
AJAX 请求提交答案:
$(".answer").click(function() {
$.ajax({
url: "http://exmaple.com/submit-question",
type: "POST",
data: {"question": $(this).data('q'), "answer": $(this).data('ans')}
});
});
该项目托管在VPS服务器上,我正在考虑使用websockets。
我应该使用websockets吗?
我从来没有安装或使用过websockets,所以我不知道它是否适合这项任务,因为大多数时候我看到websockets用于聊天应用程序和通知。
1条答案
按热度按时间ujv3wf0j1#
Websockets是实现通知和聊天功能的常见选择。但是,对于您的特定用例来说,它可能不是最有效的解决方案,在这种情况下,用户的回答会触发一个事件,并且每次都通过WebSockets发送请求。更有效的方法是在从控制器加载页面时设置会话,或者使用 AJAX 来确定用户开始应答的确切时间。这避免了不必要地使用WebSockets,并提供了一个更有效的解决方案。
如果答案可以保存在JSON对象中,则可以处理来自前端的所有请求,并对答案数组进行散列以保持它们的安全性。您可以使用
json_encode
函数将对象转换为字符串,然后使用hash
函数创建字符串的散列。例如,在Laravel中使用sha256算法对JSON对象进行哈希:对于JavaScript代码,假设
$hash
是从Laravel发送的散列值:建议使用此方法,因为当许多学生同时回答时,为每个答案发送请求会导致学生体验不佳。虽然WebSockets可能没有帮助,但如果有必要,您可以尝试使用Pusher。