前情提要
我们第一节的时候,已经大致介绍reverb,他 是 Laravel 应用程序的第一方 WebSocket 服务器,可将客户端和服务器之间的实时通信直接带到您的指尖。开源且只需一个 Artisan 命令即可 - 尽在 Laravel 团队的精心打造。

这一节开始,我们来介绍它具体使用方法。
如何使用
安装
第一步、通过安装广播安装
方式一
在执行之前,需要把nodejs版本切换到22.0.0以上哦
php artisan install:broadcasting
执行后,提示:您想安装并构建广播所需的节点依赖关系吗?

方式二
composer require laravel/reverb
安装完成后,我们查看:config/broadcasting.php 文件:
<?php return [ /* |-------------------------------------------------------------------------- | 默认广播器 |--------------------------------------------------------------------------- | | 此选项控制当需要广播事件时框架将使用的默认广播器。您可以将其设置为 | 下面“connections”数组中定义的任何连接。 | | 支持:“reverb”、“pusher”、“ably”、“redis”、“log”、“null” | */ 'default' => env('BROADCAST_CONNECTION', 'null'), /* |--------------------------------------------------------------------------------------- | 广播连接 |--------------------------------------------------------------------------------------- | | 您可以在此处定义将用于 | 将事件广播到其他系统或通过 WebSocket 广播的所有广播连接。此数组中提供了 | 每种可用连接类型的示例。 | */ 'connections' => [ 'reverb' => [ 'driver' => 'reverb', 'key' => env('REVERB_APP_KEY'), 'secret' => env('REVERB_APP_SECRET'), 'app_id' => env('REVERB_APP_ID'), 'options' => [ 'host' => env('REVERB_HOST'), 'port' => env('REVERB_PORT', 443), 'scheme' => env('REVERB_SCHEME', 'https'), 'useTLS' => env('REVERB_SCHEME', 'https') === 'https', ], 'client_options' => [ // Guzzle 客户端选项: https://docs.guzzlephp.org/en/stable/request-options.html ], ], 'pusher' => [ 'driver' => 'pusher', 'key' => env('PUSHER_APP_KEY'), 'secret' => env('PUSHER_APP_SECRET'), 'app_id' => env('PUSHER_APP_ID'), 'options' => [ 'cluster' => env('PUSHER_APP_CLUSTER'), 'host' => env('PUSHER_HOST') ?: 'api-'.env('PUSHER_APP_CLUSTER', 'mt1').'.pusher.com', 'port' => env('PUSHER_PORT', 443), 'scheme' => env('PUSHER_SCHEME', 'https'), 'encrypted' => true, 'useTLS' => env('PUSHER_SCHEME', 'https') === 'https', ], 'client_options' => [ // Guzzle 客户端选项:https://docs.guzzlephp.org/en/stable/request-options.html ], ], 'ably' => [ 'driver' => 'ably', 'key' => env('ABLY_KEY'), ], 'log' => [ 'driver' => 'log', ], 'null' => [ 'driver' => 'null', ], ], ];
接着我们修改.env文件中:
BROADCAST_CONNECTION=reverb
配置
在后台,install:broadcasting Artisan 命令将运行 reverb:install 命令,该命令将使用一组合理的默认配置选项安装 Reverb。如果您想进行任何配置更改,可以通过更新 Reverb 的环境变量或更新 config/reverb.php 配置文件来进行。
应用程序凭据
为了建立与 Reverb 的连接,必须在客户端和服务器之间交换一组 Reverb“应用程序”凭据。这些凭据在服务器上配置,用于验证来自客户端的请求。您可以使用以下环境变量定义这些凭据:
REVERB_APP_ID=my-app-id REVERB_APP_KEY=my-app-key REVERB_APP_SECRET=my-app-secret
允许的来源
您还可以通过更新 config/reverb.php 配置文件 apps 部分中的 allowed_origins 配置值来定义客户端请求可能来自的来源。任何来自您允许的来源中未列出的来源的请求都将被拒绝。您可以使用 * 允许所有来源:
'apps' => [ [ 'app_id' => 'my-app-id', 'allowed_origins' => ['laravel.com'], // ... ] ]
其他应用程序
通常,Reverb 会为安装该应用程序的应用程序提供 WebSocket 服务器。但是,可以使用单个 Reverb 安装为多个应用程序提供服务。
例如,您可能希望维护一个 Laravel 应用程序,该应用程序通过 Reverb 为多个应用程序提供 WebSocket 连接。这可以通过在应用程序的 config/reverb.php 配置文件中定义多个应用程序来实现:
'apps' => [ [ 'app_id' => 'my-app-one', // ... ], [ 'app_id' => 'my-app-two', // ... ], ],
SSL
在大多数情况下,安全的 WebSocket 连接由上游 Web 服务器(Nginx 等)处理,然后再将请求代理到您的 Reverb 服务器。
但是,有时,例如在本地开发期间,让 Reverb 服务器直接处理安全连接会很有用。如果您正在使用 Laravel Herd 的安全站点功能,或者您正在使用 Laravel Valet 并已针对您的应用程序运行安全命令,则可以使用为您的站点生成的 Herd / Valet 证书来保护您的 Reverb 连接。为此,请将 REVERB_HOST 环境变量设置为您站点的主机名,或在启动 Reverb 服务器时明确传递主机名选项:
php artisan reverb:start --host="0.0.0.0" --port=8080 --hostname="laravel.test"
由于 Herd 和 Valet 域解析为 localhost,运行上述命令将导致您的 Reverb 服务器可通过安全 WebSocket 协议 (wss) 在 wss://laravel.test:8080 访问。
您也可以通过在应用程序的 config/reverb.php 配置文件中定义 tls 选项来手动选择证书。在 tls 选项数组中,您可以提供 PHP 的 SSL 上下文选项支持的任何选项:
'options' => [ 'tls' => [ 'local_cert' => '/path/to/cert.pem' ], ],
Herd (Laravel开发 完善 一键式 PHP 开发环境。)

heard是laravel全新的一键式 PHP 开发环境。 零依赖。零烦恼。我在b站上也看到一些up主在使用了。这个工具支持mac 和windows,大家也可以尝试下:官网
命令行
reverb reverb:install Install the Reverb dependencies reverb:restart Restart the Reverb server reverb:start Start the Reverb server
相关命令
# 运行 php artisan reverb:start php artisan reverb:start --host=127.0.0.1 --port=9000 php artisan reverb:start --debug php artisan reverb:restart #
对于host port 等配置,也可以通过在应用程序的 .env 配置文件中定义 REVERB_SERVER_HOST 和 REVERB_SERVER_PORT 环境变量。
REVERB_SERVER_HOST 和 REVERB_SERVER_PORT 环境变量不应与 REVERB_HOST 和 REVERB_PORT 混淆。前者指定运行 Reverb 服务器本身的主机和端口,而后者指示 Laravel 将广播消息发送到何处。例如,在生产环境中,您可以将来自端口 443 上的公共 Reverb 主机名的请求路由到在 0.0.0.0:8080 上运行的 Reverb 服务器。在这种情况下,您的环境变量将定义如下:
REVERB_SERVER_HOST=0.0.0.0 REVERB_SERVER_PORT=8080 REVERB_HOST=ws.laravel.com REVERB_PORT=443
生产环境使用
通过nginx反向代理
server { ... location / { proxy_http_version 1.1; proxy_set_header Host $http_host; proxy_set_header Scheme $scheme; proxy_set_header SERVER_PORT $server_port; proxy_set_header REMOTE_ADDR $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_pass http://0.0.0.0:8080; } ... }
优化
文件描述符

event loop
在底层,Reverb 使用 ReactPHP 事件循环来管理服务器上的 WebSocket 连接。默认情况下,此事件循环由 stream_select 提供支持,不需要任何额外的扩展。但是,stream_select 通常限制为 1,024 个打开文件。因此,如果您计划处理超过 1,000 个并发连接,则需要使用不受相同限制的替代事件循环。
Reverb 将在可用时自动切换到 ext-uv 支持的循环。此 PHP 扩展可通过 PECL 安装:
pecl install uv

Supervisor 守护进程管理
使用宝塔的可以图形化操作,命令行就自行AI,关注一个优化参数:
[supervisord] ... minfds=10000