2016-12-28 37 views
3

我发现pthreads不适用于Web环境。我使用PHP7.1在FPMLinux Debian我也使用Symfony 3.2。所有我想做的事,例如:使用FPM在PHP7上异步/线程

  1. 用户提出的要求和PUT文件(即1GB)
  2. PHP服务器接收文件并处理它。
  3. 立即返回true用户(jsonResponse)没有等待处理上传的文件
  4. 后来,当处理文件完成(移动,复制,复制任何你想要的)只需要添加一个事件或背景不回调,并通知用户。

现在。为此,我创建了Console Command。我从后台执行Process('bin/console my:command')->start();,并执行我的处理。但是这对我来说是用火箭筒杀死一只苍蝇。我必须将许多变量传递给此可执行命令。

所有我想创建另一个线程,只是返回给用户而无需等待处理。

你可能会说这是重复。并指向pthreads但是 pthreads 声明它仅用于CLI。 pthreads的最后一个版本也不适用于symfony。 (致命错误)。

我停留在这一点上有疑问,如果我要留在创建每个上传的文件或移动python -> django

+3

你不想要线程。你想要一个工作队列。看看Gearman或类似的东西。 – Gordon

+0

我真的很喜欢它。我期待着doc。我认为这会更适合我的需求。我在我的问题中还提到了**队列**,但我稍后再删除。在看到Gearman和队列机制后,我决定去找工作队列。此外,请阅读说明 - 例如,每次执行2个线程,并假设400客户端进入服务器,它将运行800个线程。这不是我想要的。 Gearman是这里的关键。我会深入研究它。谢谢。哦!你可以添加这个作为答案:) – xangr

+1

也许你正在寻找异步处理:https://gist.github.com/LeonanCarvalho/62c6fe0b62db8a478f502f84c5734c83 – LeonanCarvalho

回答

3

你不想线程处理。你想要一个工作队列。看看Gearman或类似的东西。

的Gearman提供了一个通用的应用程序框架的工作外包给那些更适合做这项工作的其他机器或过程。它允许您并行执行工作,负载平衡处理以及在语言之间调用函数。它可用于从高可用性网站到传输数据库复制事件的各种应用程序。换句话说,它是分布式处理交流的神经系统。

+1

另外,https://github.com/mmoreram/GearmanBundle谁使用像我一样的Symfony。它每分钟越来越好:) – xangr