Laravel Reverb 是 Laravel 的一个软件包,Laravel 是一个 PHP Web 应用程序框架,可促进实时、事件驱动的通信。它通常使用 WebSockets 在 Web 应用程序中提供实时更新和交互。这对于需要即时数据更新的应用程序非常有用,例如聊天应用程序、实时通知和实时仪表板。

在 Laravel 文档中,有关于如何在测试环境和使用 Nginx 作为服务器的生产环境中使用它的说明。但是,没有关于如何在 Apache2 上运行它的明确说明。在深入研究如何在 Apache 上运行它之前,我们需要首先了解 Laravel Reverb 的工作原理。
工作准则
虽然您可能认为 Laravel Reverb 通过 Websocket 处理来回通信,但深入研究配置会发现它同样需要 HTTP/HTTPS 通信。根据我们的观察,Laravel Reverb 可帮助前端实时接收后端(Laravel)调度的事件。目前没有明确的指南说明如何从前端使用打开的通道向后端发送消息。为此,您需要向后端发送 HTTP 请求。同样的逻辑也适用于想要将事件调度到 WebSocket 服务器的 Laravel。

考虑一下这个电子商务网站的场景,其中用户将产品添加到卡中,并且我们希望购物车图标增加购物车中的商品数量。
创建令人惊叹的网站
使用最好的免费页面构建器 Elementor
现在开始- 第一步是使用 Laravel Echo 连接到 WebSocket 服务器(有关详细信息,请参阅laravel 上的广播)并监听特定频道。
- 当购物车商品数量增加时,我们会在后端发送一个事件
- Laravel 将向 WebSocket 服务器触发一个 POST 请求,然后服务器将向连接到通道的前端发送一条消息。
基于这种场景,仅配置 WebSocket 是不够的,因为我们还需要启用对 HTTP 请求的支持。
配置 WebSocket
Laravel Reverb 使用 Node.js 来处理 WebSocket 通信。在安装Laravel Reverb的过程中,您会注意到 node js 以某种方式参与其中。通过阅读 Laravel 的文档,您将更好地了解 Laravel reverb 初始配置所需的基本配置。
通过使用:
php artisan install:broadcasting
您将在 .env 文件中增加默认设置。例如,您的:REVERB_APP_ID、REVERB_APP_KEY 和 REVERB_APP_SECRET 将配置为默认自定义值。您需要配置的部分是 WebSocket 服务器的位置以及 Laravel 如何与其通信。
在子域上部署 WebSocket
理想情况下,您需要创建一个子域。虽然您仍然可以将所有内容托管在同一个域上,但最终可能会出现臃肿的 Apache 配置。但是,拆分内容可以帮助您快速发现问题所在(这是我的观点,您可以随心所欲地做)。
首先确保我们的 .env 文件已准备好实现我们想要实现的目标:
- REVERB_SERVER_HOST:127.0.0.1
- REVERB_SERVER_PORT:8080
- REVERB_HOST: ws.codewatchers.com
- 混响端口:443
- REVERB_SCHEME: https
我们决定创建一个名为“ws.codewatchers.com”的子域,我们将在其中部署我们的 WebSocket 服务器。根据您的情况,将 ws.codewatchers.com 更改为您喜欢的域。
<VirtualHost *:443>
ServerName ws.codewatchers.com
ServerAlias ws.codewatchers.com
ErrorLog ${APACHE_LOG_DIR}/ws.codewatchers.com-error.log
CustomLog ${APACHE_LOG_DIR}/ws.codewatchers.com-access.log combined
SSLEngine on
SSLProxyEngine on
SSLCertificateFile /path/to/certificate/local.crt
SSLCertificateKeyFile /path/to/certificate/local.key
ProxyPass /app "ws://127.0.0.1:8080/app"
ProxyPassReverse /app "ws://127.0.0.1:8080/app"
</VirtualHost>
请注意,我们在这里使用 SSL,因此您可能需要为您的子域颁发证书。您可以使用Certbot来实现这一点(Bing Copilot 将为您提供帮助)。
添加对 HTTP/S 的支持
如上所述,Laravel Reverb 服务器还需要支持常规 HTTP 请求。为此,我们通过代理将所有带有 /app 的请求转发到“ws://127.0.0.1:8080/app”。这是用于套接字的 URL 段。此外,Laravel 使用 /apps 发送 POST 请求,因此我们将在上面的 Apache 配置中添加一个新配置:
ProxyPass / "http://127.0.0.1:8080/"
ProxyPassReverse / "http://127.0.0.1:8080"
在这里,我们希望其他没有“/app”(严格来说)的请求通过常规 HTTP 请求转发。
完成此操作后,请不要忘记使用以下命令重新加载 Apache 配置:
sudo service apache2 reload
配置 Supervisor
Supervisor 是其中的一个重要部分,因为我们将指示它为我们执行混响服务器。这里的好处是,只要执行失败,它就会重新启动。因此,我们确信 WebSocket 将始终(或几乎)运行。Laravel 有一个简短的Supervisor部分,但我们将深入介绍并给出一个例子:
[program:laravel-reverb]
command=php artisan reverb:start
directory=/path/to/your/laravel/project
autostart=true
autorestart=true
stderr_logfile=/path/to/desired/logfile.log
stdout_logfile=/path/to/desired/logfile-out.log
user=ubuntu
我们假设您以用户“ ubuntu ”的身份在 Ubuntu 上执行它。您将根据需要调整这些参数。
队列和任务调度
如果您有异步执行的队列(数据库或 redis),则需要确保其配置正确且正在运行。事实上,广播的事件是作为作业执行的。

您可能需要参考 Laravel 文档来配置任务调度。您也可以选择安装Laravel Telescope来监控您的作业并检查其触发方式。
您还可以使用浏览器控制台来检查 WebSocket 的工作情况。

我们希望本教程对您有所帮助,如果您在阅读本教程时遇到任何问题,请告诉我们。