php - 如何在 php 中刷新数据并断开用户连接但保持脚本事件

标签 php ajax multithreading

这是一个棘手的问题,在开发 php+ajax 应用程序时,我遇到了一些很长的查询,它们没有问题,但它们可以在后台完成。

我知道有一种方法可以只向用户发送回复,同时通过 exec() 将真正的处理交给另一个进程,但是我觉得这不合适,这可能会产生漏洞,而且实现它并不实用兼容虚拟服务器和跨平台。

PHP 提供了 ob_* 函数,虽然它们有助于刷新缓存,但用户将保持连接直到脚本运行。

我想知道在向用户发送数据并使用 apache 关闭连接/线程后,是否有替代 exec 的方法来保持脚本运行,或者是否有一种不太“脏”的方式将处理数据发送到另一个脚本。

最佳答案

我在网站上使用的是 Gearman .

Gearman 让您可以通过命令行在后台运行任务 worker 。这些工作人员监听某些任务的请求,然后在收到请求时处理它们。

在 Web 应用程序方面,我只是执行 $GEARMAN->doBackground("task_name","task_data");,然后任务被发送给 worker,执行立即返回到脚本。

它比执行 exec 更安全,因为 gearman 任务作为 PHP 函数运行。

关于php - 如何在 php 中刷新数据并断开用户连接但保持脚本事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2842644/

相关文章:

php - 当我编辑文章时,我在 mysql 数据库中的内容重复

php - 删除 PDO 中的多行

php - 从查询中获取 PDO 的列名称

php - JQUERY AJAX 为每个循环自定义属性

javascript - 尝试使用 Ajax 提交数据而无需页面加载以及选择的更改事件

java - java中的中断处理

php - fatal error :未捕获的异常 'Zend_Session_Exception' 带有消息“Zend_Session::start()”

ajax - 从动态 (AJAX) 加载的 Bootstrap Modal 返回数据

c# - 由目标对象自身锁定

java - 在Java 8中并行调用两个函数