首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在PHP中使用前台请求的分布式处理系统

在PHP中使用前台请求的分布式处理系统
EN

Stack Overflow用户
提问于 2012-10-04 07:28:33
回答 2查看 404关注 0票数 6

我熟悉php-resque和其他用于处理后台作业的作业处理系统,但我认为它不能满足我的需要。

在这种情况下,我有一个传入的web服务请求,它需要对外部系统执行多个(2-4)独立的呼叫,并向客户端返回一个统一的响应。每个标注可能需要300-500 no,所以我希望每个标注并行执行,这样整个过程不需要超过500 no+/-总计。

我使用php-resque和其他系统的问题是,即使等待1秒就开始发出这些标注的时间太长了,我正在考虑另一种方法。

我的想法是:

  1. 每个单独的标注都被描述并存储在具有给定唯一请求ID的数据库中。
  2. 我们立即将作业作为异步php进程(也称为“辅助进程”)启动。
  3. 每个工作人员将其结果写回作业记录,并指示其已完成
  4. 同时,我们每50-100 of轮询一次作业表,以检查每个作业的状态。
  5. 当每个都完成时,我们将根据需要解析结果并返回响应。

当然,我们会为每个请求和整个过程实现一个超时.

有什么想法?我说错了吗?php能立即启动多个并行作业吗?

EN

回答 2

Stack Overflow用户

发布于 2012-10-08 05:32:39

您的计划应该是可行的,但是我认为您可以通过使用PHP过程控制函数来避免所有的数据库通信甚至轮询。

  1. 将主进程分叉的次数与需要它并行运行的任务一样多。请参阅:分叉
  2. 在这些分叉过程中执行任务,并让它们正常退出。
  3. 启动这些任务的进程应该在SIGCHLD信号退出时监听SIGCHLD信号,等待它们全部完成。或者,如果他们没有在您选择的超时之前,然后发送SIGTERM信号给他们清理。见:西格托杀掉

但是,您必须在PHP脚本中使用这些函数,因为.

http://www.php.net/manual/en/intro.pcntl.php

不应在web服务器环境中启用过程控制,如果在web服务器环境中使用任何过程控制功能,则可能会发生意外结果。

但是您的web服务器可以轻松地exec()您的CLI脚本,这将完成所有的艰苦工作,返回这些任务的状态,等等。

票数 2
EN

Stack Overflow用户

发布于 2012-10-08 09:30:21

如果您的外部调用只是HTTP请求,则可以使用curl并执行多个请求。他们似乎完全满足了你的需要。

如果情况不一样,我可以强烈推荐吉尔曼

如果您想弄脏您的手并编写您自己的守护进程,我建议跳过IPC函数,进行一些更高级别的操作,比如ZeroMQ,如果它们死了,也许可以使用监督员d重新启动它们。编写长期运行的PHP进程相对比较困难,因此您必须在构建过程时考虑到外部脚本将随机死掉,并准备优雅地处理它。

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

https://stackoverflow.com/questions/12722245

复制
相关文章

相似问题

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