如何将 Laravel 应用程序变成套接字监听器

问题描述 投票:0回答:1

互联网上有许多 Laravel 应用程序和 Javascript 前端之间的套接字通信示例。

不幸的是,所有这些样本都只属于一种场景:

  • Laravel 应用程序发起通信并推送自己的数据
  • Javascript前端通过监听通道订阅该数据。

但是逆向行为呢:

  • Javascript前端推送自己的数据(存在很多示例)
  • Laravel 应用程序通过监听通道订阅此数据(无示例)。

如何实现Laravel部分?

当然,我可以为 Laravel 内部事件编写监听器。但是用外部数据监听套接字呢?

laravel sockets listener
1个回答
0
投票

在 Laravel 中,服务器无法像发布/订阅架构中的订阅者那样“监听”来自客户端的事件。

但是,我想分享一个我已经研究了一段时间的解决方案,它解决了这个问题的(Laravel 作为套接字侦听器)部分。

假设 Socket.IO 正在使用并运行在单独的服务器上,客户端将与服务器打开双向通道。

  • 当客户端发送消息时,Socket.IO 服务器接收它并以多种方式之一将其传递给 Laravel 应用程序,但 HTTP 可能是最简单的一种,这意味着 Socket.IO 服务器执行内部对 Laravel 应用程序的 HTTP 请求,如果 Socket.IO 服务器和托管 Laravel 应用程序的 Web 服务器位于同一服务器上,那么速度应该非常快。

  • Laravel 应用程序从 Socket.IO 服务器接收传入消息并将其放入队列以供稍后广播。

  • 消息出队并发送到代理(例如 Redis)。

  • Socket.IO 正在监视代理是否有任何新消息要广播回其他客户端。

在这种情况下,我们假设 Laravel 使用 Redis 广播驱动程序。

这是可行的,我以前也做过,但是需要大量的安全修改和优化,而且我没有把它投入生产,只是给主体列出来。


注意: 有一个名为 Centrifugo 的实时消息服务器,其工作方式相同,它也可以通过 Denis Zakharenko 实现的 广播驱动程序 与 Laravel 集成

© www.soinside.com 2019 - 2024. All rights reserved.