互联网上有许多 Laravel 应用程序和 Javascript 前端之间的套接字通信示例。
不幸的是,所有这些样本都只属于一种场景:
但是逆向行为呢:
如何实现Laravel部分?
当然,我可以为 Laravel 内部事件编写监听器。但是用外部数据监听套接字呢?
在 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 集成