php 获取进程状态,从服务器进程获取实时反馈[在PHP中]

需求:

我需要运行一个后台进程(根据用户请求),该过程大约需要30到60秒才能完成.我想给用户一些状态反馈.注意:Toly是正确的,不需要“背景”.

工作原理:

在此期间,该进程将打印约20条状态消息,我使用proc_open检索它们,并使用fgets在读取管道上进行侦听.我可以将这些消息保存到会话变量中,并使用时间戳(以帮助调试),我可以看到随着过程的进行,会话数组已被这些消息写入.

麻烦:

我的计划是使用ajax调用(每秒)轮询服务器,以检索这些会话var,以便在DOM中显示.瓶颈似乎是服务器仍在运行后台进程时无法为ajax请求提供服务.后台进程完成时,所有内容立即转储.据我所知,问题不在于输出缓冲,因为使用与每个过程消息一起保存的(调试)时间戳显示服务器正在按顺序写入会话var,所以这就是我知道proc_open和管道读取按预期工作的方式.问题似乎是服务器在处理完成之前无法向AJAX请求提供其JSON对象.或者,也许更准确地说,是通过读取管道的循环完成的.

明显的误解:

我认为将流程发送到后台(使用&)可能会给我一个解决方案.显然,我不知道后台进程和分支进程之间的区别.在这种情况下,在后台运行进程会获得什么好处(如果有的话)?

可能的解决方案:

>我不希望用户启动运行此程序的进程

过程/场景如此繁重,但是如果有什么我可以

内置到该解决方案中,这将有助于减轻繁重的工作,

现在喜欢这样做.

>这是多线程(pthread)还是

多进程(叉)解决方案?

>或者,我应该保存一个进程ID,

让我们用while(.. fgets ..)语句轮询它,然后

服务器为ajax服务后,请返回到该过程

请求?

>我想我可以运行伪造的状态消息,然后

完成后返回结果时,可以准确响应.

处理请求的时间不取决于用户,因此

我的虚假时间可能非常准确.但是,我想

知道提供实时反馈的解决方案.

解决方法:

在搜寻了一种您可以在此处描述的相同行为的技术之后,我提出了一个针对我的项目的简单解决方案.

一些重要的理论:

-session_start()和$_SESSION [“ x”] =“ y”之类的集合将始终锁定会话文件.

案例场景:

-一个process.php-通过ajax调用运行

-B-get_session.php-第二个ajax调用;

主要问题是,即使在通过AJAX运行的进程中设置$_SESSION,它也将始终必须等待会话文件被解锁,这将导致两个进程之间的同步. (AB)-两者同时完成!

因此,解决此问题并获得良好结果的最简单方法是在每个集合之后使用session_write_close().例如.:

%_SESSION["A"] = "B";

$_SESSION["x"] = "y";

session_write_close();

PS:最好的方法是拥有一组自定义的函数来处理会话.

抱歉加价.我刚刚创建了一个堆栈帐户.

标签:ajax,pthreads,proc,php,fork

来源: https://codeday.me/bug/20191121/2054977.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值