是否可以与Laravel

时间:2017-03-22 15:11:05

标签: php laravel laravel-5 beanstalkd

我正在尝试建立一个与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"等}。

使用双方的原因是双重的。一方面是使用不同的工人。另一方面,我们希望API的所有逻辑尽可能安全。当发生黑客攻击时,只有APP方会受到攻击。

也许我正在排队等等所有事情都困难重重?如果你有更好的方法来达到同样的目的,那当然也会有所帮助。

1 个答案:

答案 0 :(得分:1)

我知道您的问题是如何同步运行此问题,我认为您遇到的问题是您无法在工作完成后更新第一台服务器。你可以通过广播实现这一目标。

我在我们的应用程序中做了类似上传的事情。我们使用Redis队列,但beanstalk将执行相同的工作。最重要的是我们使用pusher,使用用户可以订阅的套接字,它看起来很棒。

  • 用户加载Web应用程序,连接到推送服务器
  • 用户上传文件(此时您可以显示告诉用户该文件正在处理的内容)
  • 工人看到有文件
  • 工作人员处理文件
  • 工作人员在完成或失败时触发事件
  • 此事件将广播给推送服务器
  • 由于用户正在收听推送服务器,因此通过javascript
  • 接收活动
  • 您现在可以使用javascript显示弹出窗口或更新表格(即使用户导航了也能正常工作)

我们使用了推杆,但你可以使用redis,beanstalk和许多其他解决方案来做到这一点。阅读Laravel文档中的Event Broadcasting