2

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

所以我的问题是这个...

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

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

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

4

3 回答 3

3

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

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

于 2012-10-25T10:00:51.177 回答
1

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

我的意思是分三步..

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

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

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

于 2012-10-25T10:07:43.560 回答
1

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

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

于 2012-10-25T09:56:31.803 回答