1

php:我的问题是关于我想在共享主机的服务器上使用 LAMP(Linux、Apache、mysql、php)和 html 开发的项目。

<input type="text">我希望用户在我的网页上输入一个数字,单击“获取结果”并获取结果(显示在另一个页面或使用 ajax 请求 - 无论如何)。

计算结果最多需要 24 小时。是否可以编写这样一个项目,让用户的浏览器等待长达 24 小时?共享主机的用户浏览器和服务器之间的对话是否有任何限制?我的意思是它被限制在24小时以内吗?

我应该尝试这个项目还是最好使用其他技术编写它?

4

4 回答 4

1

从技术上讲,是的,您可以进行 ajax 长轮询。只要您需要,请求就会保持打开状态(消耗 Web 服务器资源),直到生成响应并将其返回给用户。不管它是不是一个好主意......你不能真的期望用户让浏览器窗口保持打开那么长时间。这只是原因之一。

于 2013-07-26T19:56:29.667 回答
1

如果您存储输入数字时的时间戳,并在服务器上计算响应,那么在浏览器和服务器上都会更容易。

之后,您可以使用 ajax 轮询来检查 24 小时是否已过。在这种情况下,我不建议使用服务器推送,因为我不想让浏览器长时间打开。

于 2013-07-26T19:59:44.383 回答
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.
}
于 2013-07-26T20:08:00.283 回答
1

从用户体验的角度来看,这并不可行。

虽然可能让客户端等待那么长时间,但您将不可避免地遇到 Web 服务器、客户端浏览器、客户端操作系统以及可能的中间代理服务器超时的问题。TCP 的设计不是为了让连接保持打开那么长时间。

相反,您应该接受请求并返回标头HTTP/1.0 202 Accepted以指示请求已成功并正在处理,然后发送推送通知(例如电子邮件)和/或让用户检查可以定期刷新的状态页面。

于 2013-07-26T21:04:22.087 回答