【问题标题】:PHP Queue System with Codeigniter. HOW? [closed]带有 Codeigniter 的 PHP 队列系统。如何? [关闭]
【发布时间】:2012-10-25 09:52:11
【问题描述】:

我正在为需要生成 25,000 - 100,000 个条形码的客户创建一个网站。我已经获得了一个生成代码的软件的许可,但是生成一个命令大约需要 20 到 30 分钟。 60,000 个条形码。

所以我的问题是……

是否可以使用 php 中的设置时间限制函数设置为零(无时间限制),然后使用 Ajax 将变量传递给库并使用 ignore_user_abort 函数。这种方式基本上会发生这种情况:

客户选择条形码数量和类型,他们结账,在支付网关发回 SUCCESSFUL 响应后,我们运行一个 ajax 请求,将时间限制设置为 UNLIMITED,然后告诉脚本即使用户关闭也运行他们的浏览器或退出页面。服务器以这种方式处理订单,无论需要 2 秒还是 45 分钟都没有关系。订单完成后,客户可以刷新他们的帐户,他们会看到他们的订单。

我只是梦想着认为这听起来是个好主意还是可行的解决方案?我在多年的 php 队列系统编码方面没有任何经验,所以我不想创建一个,除非我绝对必须这样做。

【问题讨论】:

  • 这个回复真的一点帮助都没有。我真的不想深入探讨为什么客户需要生成这么多条码或它是什么类型的条码。我已经有了一个非常完善的创建条形码的解决方案。它们是 EPS、PDF 和 JPEG 矢量条形码。如果你再读一遍我的问题,你就会明白我在问什么。与条码创建无关,而与如何制作一个可能需要 20 分钟的流程,无论流程是什么,在没有队列系统的情况下运行。
  • 另外,无论出于何种原因,如果它对您有所帮助,他是互联网上最大的条形码零售商之一,他的大部分订单都在 10 到 250 个条形码之间。但在他经营的 5 年中,他收到了大约 200 个订单,这些订单属于 25,000 - 100,000 个条形码类别。
  • 这不是 Code Igniter 特有的。你基本上只需要某种队列。应该不难找。有关一些想法,请参阅stackoverflow.com/search?q=job+queues+php 和右侧的相关部分。

标签: php mysql codeigniter queue


【解决方案1】:

我会考虑使用类似 Gearman 的东西 (http://gearman.org/index.php)。

这也将与 CI 应用程序分开......然后 CI 将使用 Gearman 来处理队列......

【讨论】:

【解决方案2】:

不要依赖一个长期运行的 PHP 实例。特别是如果它以任何方式与用户/浏览器相关联。将后端系统与 Web 服务器响应等临时进程正确分离。

建立一个合适的队列工作者系统。将所有订单放入队列(数据库、平面文件等),并让工作人员从队列中一一接受订单,处理它们,更新结果。 worker 可以是一个 cron 作业、一个守护进程、一个无限循环的 PHP 脚本(如果它崩溃则由监视器重新启动)或其他任何东西。您还可以查看 AMQP、ZeroMQ 或类似的队列/消息传递系统。

【讨论】:

  • 这样的工作应该是这样的: 1. 将必要的信息添加到数据库表中 2. 每 5 分钟运行一次 cron,它会拉取最新的队列表项并运行生成条形码的过程并制作它可供客户端使用,如果成功,则删除该表项?
  • 是的,但是:仅每 5 分钟运行一次该 cron 作业意味着订单可能会不必要地延迟 5 分钟。这可能是也可能不是问题。这取决于您所说的“向客户提供”是什么意思。如果成功,工人应该用“工作完成,结果可以在这里找到......”来更新数据库。客户端将不得不每隔一段时间轮询一次“它完成了吗,它完成了吗”以获取更新。那个,或者发邮件什么的。
【解决方案3】:

尝试在后端使用 CLI,默认没有时间限制..http://php.net/manual/en/info.configuration.php#ini.max-execution-time

我的意思是 3 个步骤..

首先将订单保存在您的数据库中..

第二个!!! 将 crontask 设置为每分钟运行一次,以获取和处理 1 个订单。 订单准备好后(30 分钟后)使用下载链接或您作为响应返回的任何内容更新数据库并结束 crontask。

第三。 在他的订单准备好后,在某个页面上向用户显示结果。

【讨论】:

  • 这和从 Paypal 中取款一样......你下订单,等待处理它,最后你得到你的订单已经完成..
猜你喜欢
  • 1970-01-01
  • 2012-12-18
  • 2011-08-02
  • 2013-08-20
  • 1970-01-01
  • 2010-09-20
  • 2013-02-19
  • 2011-06-24
  • 1970-01-01
相关资源
最近更新 更多