它没有有。
这些软件恰好使使用 Websocket 协议变得微不足道。
请记住,Laravel 是一个自以为是的框架。这意味着它将选择自己的库来为您抽象出这些类型的概念,这样您就不必太担心幕后发生的事情。
基本上,您需要两个组件才能使用 Websocket:
- Websocket 服务器
- Websocket 客户端
Laravel 不使用 Websockets 直接与前端通信的原因是 Laravel 本身不是 Websocket 服务器。至少,不是真的。虽然 PHP 确实支持使用 Websocket 协议 - and even some libraries to leverage it a little more nicely - 但它不像其他语言那样经常用于处理长期存在的进程。
相反,Laravel 使用 Pub/Sub functionality that Redis provides 来监听通过 Redis 和 Predis library 发生的事件。这样做的原因是因为 Laravel 更适合作为 websocket 服务器和所有连接客户端的中间人。
这样,Laravel 既可以使用Broadcasting Events 将信息向上传递到 Websocket 服务器,也可以从 Websocket 服务器接收事件信息并确定用户是否有能力或授权接收它们。
如果你不想使用 Pusher,有一个库可以让你运行自己的 Websocket 服务器,专门用于 Laravel,名为 Laravel Echo Server。
在底层,这个库仍然使用 Socket.io 和 Redis,以便所有移动部件在 Laravel Web 应用程序中无缝地相互通信。这样做的好处是您无需担心服务器发送的消息数量。
缺点是你现在必须知道如何在你的服务器上管理和维护这个过程,以便 Websocket 服务器知道每次你重启服务器时打开,或者如果发生故障等。
查看PM2,了解有关运行和维护服务器守护程序的更多信息。
如果你不同意 Laravel 关于如何处理 Websockets 的观点,那么理论上你可以使用任何其他服务器端语言来处理 websocket 协议。它只需要对协议本身有更多的工作知识;如果 Laravel 需要使用它,你必须知道如何编写适当的 Service 和 Provider 类来处理它。