首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从PHP关闭Apache线程?

如何从PHP关闭Apache线程?
EN

Stack Overflow用户
提问于 2014-10-01 12:57:10
回答 1查看 409关注 0票数 0

我试图让PHP告诉Apache关闭连接,并分别释放工作线程。原因是我有一个脚本,这个脚本是用客户端请求调用的,需要一些时间来处理,但是没有任何返回给客户端,所以让线程被占用是没有意义的。我目前使用的代码:

代码语言:javascript
运行
复制
ignore_user_abort(true);
header('Content-Length: 0');
flush();
ob_end_flush();
header('Connection: Close');

因为我要从原始用户请求向这个脚本发送额外的异步请求,所以Content-Length: 0不会破坏客户机请求的响应。

无论如何,当我去监视服务器正在做什么时,我看到有一个工作线程被长期运行的请求所占用,这正是我不希望发生的情况。我希望脚本在后台安静地运行,而不占用Apache线程。我该怎么做?

EN

Stack Overflow用户

回答已采纳

发布于 2014-10-01 13:11:06

这听起来是一种糟糕的实践,而且有很多麻烦,例如并发性和负载平衡。

考虑实现任务队列:

  1. 您的客户端希望随意向队列中添加任务。
  2. 客户端向Apache发送请求,Apache运行PHP代码。
  3. PHP解析输入并构造一个任务,该任务被添加到队列中。
  4. 服务器向客户端返回空响应。

然后,在Apache之外设置一个后台处理上述队列的守护进程或cron作业。

这样你就可以很好地控制什么时候会发生什么,而不需要这样的黑客攻击。更重要的是,通过控制队列的处理速度,可以控制资源的使用。(如果您与限制通信量的外部API交谈,则特别有用。)

如果您希望您的队列是并行的,没有什么可以阻止您这样做的--考虑设置一些任务池,创建时的每个任务都分配给随机任务池。然后,为每个任务池设置守护进程实例--不需要PHP线程或类似的东西。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26141924

复制
相关文章

相似问题

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