我有一个 PHP 和 Javascript 的 Web 应用程序,我想在其中应用基于时间的问题生成。我预设了将在特定时间执行的代码,这将生成问题。
现在我在想如何应用它。以下是一些有关网络的信息
- Web 在 wamp 服务器上运行,有近 100 个用户定期(每天)使用它。他们在上午 9 点至 11 点和下午 2 点至 6 点之间两次登录该网站。
- 问题生成时间应为下午 4 点。
现在,我可以使用 SetTimeOut 和 Javascript Date 对象来实现所需的功能:此处
function checkVotingQuestionTime()
{
var currentTime = new Date();
if(currentTime.getHours() >= 16 && currentTime.getHours() < 23)//check the time from user OS
{
checkVoteQuestionGenerated();
}
}
function checkVoteQuestionGenerated(){
//query to php check question exists
//if no
//then generate question
}
并在主页中的文档就绪事件处注册(登录后)。此代码将对所有用户开放。
$jq(document).ready(function() {
setInterval(checkVotingQuestionTime, 60000);
}
看来,这不是可行的代码,因为
- 它将从每个客户端运行(设置超时和服务器命中 定期,如果我也从服务器获得时间,那么它会更频繁地到达服务器)
- 用户可以更改系统时间来运行上述代码。
- 可以生成多个问题,如果两个客户端同时检查问题未生成,则生成问题。
那么我如何控制上述限制或者是否有其他合适的解决方案可用?
最佳答案
每隔几分钟就有 100 个客户端轮询服务器并不是什么大问题。每次他们在您的网站上打开一个页面时,实际上都会轮询服务器。因此,将日期检查移至服务器端的 php 是您当前设置的最佳解决方案。
如果您出于美观原因不喜欢让客户端时不时地轮询服务器(我可以理解这一点),例如您希望问题在 16:00 准时刷新,你可以考虑使用套接字。实际上,这意味着客户端正在监听从服务器发送的任何更改,而无需轮询它,并在必要时进行更新。
Socket.io 很容易使用,但在与 php 交互方面并不是最简单的。我不知道您是否熟悉 Node.js,但这里有一些其他人关于套接字和 php 的小讨论:
What is the best way to use websockets along with PHP and MySQL scripts?
关于javascript - Javascript PHP 中基于时间的代码执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51082951/