【发布时间】:2017-08-14 19:15:46
【问题描述】:
我正在尝试建立一个与 Laravel 中的多个工作人员同步通信的 API 系统。我使用 Laravel 5.4,如果可能的话,我希望尽可能使用它的功能,而不需要太多插件。
我想到的是两台服务器。第一个带有 Laravel 实例的实例——我们称之为 APP——接收和回答用户的请求。第二个运行不同的工作人员,每个工作人员都是一个 Laravel 实例。这就是我对工作流程的看法:
- APP收到用户请求
- APP 将请求放入队列
- 工作人员在队列中查找作业并最终找到。
- 工人解决工作
- 工人对 APP 或 APP 的响应发现工作以某种方式解决了
- APP 向用户发送响应
我的第一个想法是使用队列和 beanstalkd。问题是这一切似乎都是异步工作的。 APP有没有办法等待其中一名工人的结果?
经过更多研究后,我偶然发现了 Guzzle。这是一条路吗?
编辑:有关该项目的一些额外信息。 我说的是一个 Restful API。例如。用户以“https://our.domain/article/1”的形式发送请求,并在标头中发送他们的 API 令牌。用户收到的是 JSON 格式的字符串,例如 {"id":1,"name":"article_name",etc.}
使用两侧的原因是双重的。一方面是使用不同的工人。另一方面,我们希望 API 的所有逻辑尽可能安全。当进行黑客攻击时,只有APP端会受到攻击。
也许我让排队和所有这些事情变得很困难?如果您有更好的方法来达到同样的目的,那当然也会有所帮助。
【问题讨论】:
-
我想说的是,在这个设置中,最好将请求放入数据库中的“池”中,并带有某种
status指示器(待定/进行中/完成)。然后,您的工作人员可以对数据库进行一些连续轮询,以执行actions存在的任何内容。 APP 还会轮询 DB,等待操作完成,然后以result响应。 -
你想如何提出请求和服务请求??使用 REST 端点还是什么??:\
-
应用程序通常不会等待队列工作者的结果——它们会触发队列中的作业并继续前进。队列作业很慢吗?为什么不运行该作业,然后在作业运行后,通过 webhook 或打开的 web 套接字引发一个事件以通知用户。或者,只需将 laravel 队列驱动程序设置为“同步”,然后它会立即完成工作并在没有作业排队的情况下给您响应。
-
我在原始帖子中添加了更多信息。也许这可以帮助您回答问题?
标签: php laravel laravel-5 beanstalkd