来自服务器的响应延迟超过24小时 - 是否可能?

时间:2013-07-26 19:23:46

标签: php javascript ajax

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

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

要计算结果,最多24小时。 是否可以编写这样的项目,以便用户的浏览器等待长达24小时?使用共享主机的用户浏览器和服务器之间的对话是否有限制?我的意思是它受限于不到24小时?

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

4 个答案:

答案 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以指示请求成功并处理,然后发送推送通知(例如电子邮件)和/或让用户检查一个可以定期刷新的状态页面。