有没有办法在“Vanilla”PHP 中创建异步代码?
Posted
技术标签:
【中文标题】有没有办法在“Vanilla”PHP 中创建异步代码?【英文标题】:Is there a way to create asynchronous code in "Vanilla" PHP? 【发布时间】:2020-08-14 14:31:25 【问题描述】:我们有一个包含大量 php 脚本的后端。将来我们可能会迁移到 NodeJs,这样它本身就会得到照顾,但我很想找到一种方法让我们的脚本异步,这样它就不会阻塞。
我们使用我们的脚本来处理来自 3rd 方服务(Stripe、Zendesk 等)的请求,并且我们的一些函数需要大量时间并产生超时错误,因为我们的 PHP 代码是同步的。
我们不打算使用像 Laravel 之类的东西(据我所知,它已经内置了),所以如果有一种方法可以创建/处理工人或类似的东西,那就太好了。
谢谢!
【问题讨论】:
你是如何触发脚本的?也许只是让另一个脚本处理,并分离用户流 每个脚本都是一个独立的端点,因此例如我们将拥有www.example.com/my-script.php
,它将接收带有 JSON 对象作为有效负载的 POST 请求,.../my-other-script.php
也将接收带有另一个 JSON 的 POST 请求作为有效负载等。乘以 50 多个脚本,您基本上就拥有了我们的后端。是的,坐在上面的处理程序会很棒。你知道如何用普通 PHP 实现它的任何例子吗?
我知道我们如何可以拥有一个更结构化的后端,其中包含 $router->get('/some/route', function($request) ....
等路由。我想知道的是如何以一种非阻塞处理请求的方式实现它,所以我的第 3 方,例如 Zendesk - 对他们得到的回应感到满意(他们需要在 4/5 秒内获得一个很好的旧 200
)
【参考方案1】:
您可以将 php 与 rabbitmq 一起用于 amqp 协议,这样您就可以在队列中发送一些信息,并将在代码之外进行处理(类似于 asincornus 代码)。 Here is a link to documentation
希望对你有帮助
【讨论】:
谢谢!我实际上已经检查了 RabbitMQ。如果我们要从头开始重建一切,这看起来是一个很好的解决方案。尽管效率很高,但它看起来也相当复杂。能够在 Vanilla PHP 中创建工作人员/队列会很棒❤️以上是关于有没有办法在“Vanilla”PHP 中创建异步代码?的主要内容,如果未能解决你的问题,请参考以下文章
尝试在 Vanilla JS 中创建 Web 组件库,你会如何开始?
从现有的 .cpp 和 .h 文件在 QtCreator 中创建 Vanilla C++ 项目