php:我的问题是关于我想在服务器上使用LAMP(Linux,Apache,mysql,php,)和html开发的项目以及共享主机。
我希望用户在我的网页上的<input type="text">
中输入一个数字,点击“获取结果”并获得结果(显示在另一个页面或使用ajax请求 - 无论如何)。
要计算结果,最多24小时。 是否可以编写这样的项目,以便用户的浏览器等待长达24小时?使用共享主机的用户浏览器和服务器之间的对话是否有限制?我的意思是它受限于不到24小时?
我应该尝试这个项目还是我最好用其他技术来编写它?
答案 0 :(得分:1)
从技术上讲,是的,你可以进行ajax长轮询。只要您需要(消耗Web服务器资源),请求将保持打开状态,直到生成响应并将其返回给用户。这是不是一个好主意......你真的不能指望用户长时间保持浏览器窗口打开。这只是一个原因。
答案 1 :(得分:1)
如果您存储输入数字的时间戳,并在服务器上计算响应,则在浏览器和服务器上都会更容易。
之后您可以使用ajax轮询来检查是否已经过了24小时。在这种情况下,我不建议使用服务器推送,因为我不希望浏览器长时间打开。
答案 2 :(得分:1)
如果您需要处理表单请求,您可以让控制器分叉一个新进程来进行计算。然后,回复给用户的响应将立即发生 - 让您告诉他们结果将通过电子邮件发送(理想情况下)或在页面刷新完成时显示。
http://php.net/manual/en/function.pcntl-fork.php
if (isset($_POST['form'])) {
// Form validation, etc.
if ($pid = pcntl_fork()) {
echo 'Your results will be ready eventually...';
exit;
}
// Process the input here in detached daemon process.
}
答案 3 :(得分:1)
从用户体验的角度来看,这不太可行。
虽然可能可能让客户端等待那么久,但是在Web服务器,客户端浏览器,客户端操作系统以及可能的情况下,您将不可避免地遇到超时问题中间代理服务器。 TCP不是为了保持连接打开那么久而设计的。
相反,您应该接受请求并返回标头HTTP/1.0 202 Accepted
以指示请求成功并处理,然后发送推送通知(例如电子邮件)和/或让用户检查一个可以定期刷新的状态页面。