我有一个简单的网页(PHP,JS和HTML),用于说明计算正在进行中。此计算由执行实际计算的PHP脚本的纯 JavaScript AJAX请求触发。 有关详细信息,请参阅 here
实际计算是什么,不起作用,所以为简单起见,它只是一个sleep() - 命令。
当我在本地执行相同的代码时(浏览器调用localhost:linux,apache,php-mod下的网站),它工作正常,与睡眠时间无关。
然而,当我让它在不同的机器上运行时(不是localhost,还有Linux,apache,php-mod),PHP脚本会运行(结果被创建),但是AJAX请求没有得到任何响应,所以如果睡眠时间> = 900秒,则没有“onreadystatechange”。当睡眠时间< 900秒它也很好地工作,AJAX请求被正确终止(readyState == 4和status == 200)。
apache和php配置或多或少是默认的,我已经验证了那里的关键选项(max_execution_time等),但是这里没有一个似乎是有效的,因为它们要么更短(<1分钟),要么更大,例如垃圾收集器(24分钟)。
所以我完全混淆了可能导致这种情况的原因。我认为它可能与网络有关,虽然我在路由器中找不到任何合适的选项。 此外,apache-logs或PHP中没有报告错误(错误登录到文件)。
让AJAX请求的JavaScript在成功返回时显示request.status,令人惊讶的是,当我在睡眠结束后在浏览器窗口中点击“Esc”时,我也会显示“200”状态,但不会自动显示应该这样做。
无论如何,我希望你可以知道如何规避这个问题? 也许每10分钟左右客户端和服务器之间的虚拟通信可能会有所帮助,但我不知道如何最好地做这样的事情,特别是让这对用户透明而不干扰实际的工作进行计算/睡眠。
最佳,
影
P.S。我引用的帖子是由我编写的,但似乎暗示它可能与某些配置选项有关,这似乎不就是这种情况。这就是我在这里写这篇文章的原因,基本上要求一种方法来规避这样一个问题而不管它是什么来源。
答案 0 :(得分:0)
我来自你提到的另一篇文章!
现在我对你要做的事情了解得更多:监控一个可能长时间运行的服务器工作,我可以推荐一些应该更好的东西,它不是你问题的直接答案,但它是一个设计考虑因素其性质包括更合适的解决方案。
基本上,取消“启动”服务器端任务的操作与监视其进度的链接。
有关与此类似的方法的更多详细信息:http://billhiggins.us/blog/2011/04/27/resty-long-ops
我希望这有助于为您提供解决问题的设计方法!