首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP异步执行

PHP异步执行
EN

Stack Overflow用户
提问于 2011-05-07 09:05:19
回答 2查看 1.6K关注 0票数 4

设想情况如下:

调用指定的URL,包括已知IdSearchDefinition,应该在db中创建一个新的Search记录,并返回新的Search.Id

在返回Id之前,我需要生成一个新的进程/启动异步执行一个PHP文件,该文件接受新的Search.Id并进行搜索。

然后UI轮询第三个PHP脚本以获取搜索状态(第二个脚本不断更新Db中的搜索记录)。

这给我在异步方式生成第二个PHP脚本方面带来了一个问题。

我将在第三方服务器上运行这个程序,所以对权限几乎没有控制。因此,我倾向于避免对新搜索记录进行cron作业/类似的轮询(如果可以的话,我也不太喜欢轮询)。我不太喜欢在与web无关的工作中使用web服务器,但为了避免权限问题,这可能是必需的。

这似乎给我留下了两个选择:

  • 调用第一个脚本返回Id并关闭连接,但继续执行并实际执行搜索(即在脚本1的末尾坚持脚本2,在追加点关闭响应)
  • 以异步方式启动第二个PHP脚本。

我不知道上述任何一项都是如何实现的。第一种感觉仍然很恶心。

如果有必要使用CURL或类似于假web调用,我会这样做,但我希望有某种方便的多线程方法,我只需生成一个新线程,并指出适当的功能和权限将从调用者(即web服务器用户)继承。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-07 09:38:14

我宁愿使用选项1,这也会使相关的功能更接近彼此。下面是如何向用户发送一些东西,然后关闭连接并继续执行的提示:

(请登录gmail网站*********,来源:http://www.php.net/manual/en/features.connection-handling.php#93441)

代码语言:javascript
复制
<?php
ob_end_clean();
header("Connection: close\r\n");
header("Content-Encoding: none\r\n");
ignore_user_abort(true); // optional
ob_start();
echo ('Text user will see');
$size = ob_get_length();
header("Content-Length: $size");
ob_end_flush();     // Strange behaviour, will not work
flush();            // Unless both are called !
ob_end_clean();

//do processing here
sleep(5);

echo('Text user will never see');
//do some processing
?>
票数 7
EN

Stack Overflow用户

发布于 2014-04-22 05:10:02

swoole:异步和并发扩展。https://github.com/matyhtf/swoole

  • 事件驱动的完全异步无阻塞的
  • 多线程反应器
  • 多进程工作者

H 110毫秒定时器H 211H 112异步MySQL <代码>H 213/代码><代码>H 114异步任务<代码>H 215H 116异步读写文件系统H 217H 118异步dns查找H 219f 220

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5920121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档