php:我的问题是关于我想在共享主机的服务器上使用LAMP(Linux、Apache、mysql、php)和html开发的项目。
我希望用户在我的网页上的<input type="text">
中输入一个数字,单击"获取结果"并获取结果(在另一个页面上显示或使用ajax请求-不管怎样)。
计算结果需要长达24小时。有没有可能写这样一个项目,让用户的浏览器等待长达24小时?在共享主机的情况下,用户的浏览器和服务器之间的对话有任何限制吗?我的意思是,它被限制在24小时以内吗?
我应该试试这个项目,还是最好用其他技术来写?
从技术上讲,是的,您可以进行ajax长轮询。只要您需要(消耗web服务器资源),请求就会一直处于打开状态,直到生成响应并返回给用户。不管这是不是个好主意。。。你真的不能指望用户能让浏览器窗口打开那么长时间。这只是一个原因。
如果存储输入数字的时间戳,并在服务器上计算响应,那么在浏览器和服务器上都会更容易。
之后,您可以使用ajax轮询来检查24小时是否已经过去。在这种情况下,我不建议服务器推送,因为我不希望浏览器打开那么长时间。
从用户体验的角度来看,这是不可行的。
虽然客户端可能会等待那么长时间,但您不可避免地会遇到web服务器、客户端浏览器、客户端操作系统以及可能的中间代理服务器上的超时问题。TCP的设计并不是为了保持连接打开那么长时间。
相反,您应该接受请求并返回标头HTTP/1.0 202 Accepted
,以指示请求已成功并正在处理,然后发送推送通知(如电子邮件)和/或让用户检查可以定期刷新的状态页。
如果需要处理表单请求,可以让控制器派生一个新的进程来进行计算。然后会立即回复用户——让你告诉他们结果会通过电子邮件发送(理想情况下),或者在完成后显示在页面刷新上。
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.
}