前情提要

我们第一节的时候,已经大致介绍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

参考文献

Laravel11 从0开发 Swoole-Reverb 扩展包(三) - reverb广播驱动使用流程的更多相关文章

  1. Cloudera5.8.3 HBase1.2.0开发必须的jar包

    Cloudera的HBase开发环境下载依赖包特别麻烦,通常是直接在CDH服务器上拷.

  2. PHP、thinkPHP5.0开发网站文件管理功能(三)重命名文件

    public function renames(){ if(request()->isAjax()){ $file = iconv('UTF-8','GB2312',urldecode(inpu ...

  3. PHP、thinkPHP5.0开发网站文件管理功能(三)编辑文件

    public function edit(){ $file = iconv('UTF-8','GB2312',urldecode(input('file'))); if(empty($file)|| ...

  4. 让TP5.0在SWOOLE上飞起来

    TP-SWOOLE 目前,TP5.1官方已经提供了think-swoole2.0,集成程度以前优雅很多,不过5.0的集成方式确实有些鸡肋.所以看了下2.0,为5.0开发了一个扩展包,可以采用compo ...

  5. 如何开发、本地测试、发布 Laravel 扩展包?

    如何开发.本地测试.发布 Laravel 扩展包?  Laravel/ 1年前/  4022 /  11   现在已经有了很多,关于如何开发 Laravel 扩展包的文章.但是大多文章写的太过片面,不 ...

  6. laravel框架应用和composer扩展包开发

    laravel5.5+ laravel官方地址 laravel是目前最流行的php框架,发展势头迅猛,应用非常广泛,有丰富的扩展包可以应付你能想到的各种应用场景,laravel框架思想前卫,跟随时代潮 ...

  7. 正确的 Composer 扩展包安装方法

    问题说明 我们经常要往现有的项目中添加扩展包,有时候因为文档的错误引导,如下图来自 这个文档 的: composer update 这个命令在我们现在的逻辑中,可能会对项目造成巨大伤害. 因为 com ...

  8. Composer 扩展包安装方法

    问题说明 我们经常要往现有的项目中添加扩展包,有时候因为文档的错误引导,如下图来自 这个文档 的: composer update 这个命令在我们现在的逻辑中,可能会对项目造成巨大伤害. 因为 com ...

  9. 如何正确使用 Composer 安装 Laravel 扩展包

    我们经常要往现有的项目中添加扩展包,有时候因为文档的错误引导,如下图来自 这个文档 的: composer update 这个命令在我们现在的逻辑中,可能会对项目造成巨大伤害. 因为 composer ...

  10. laravel 安装 Laravel 扩展包

    问题说明 我们经常要往现有的项目中添加扩展包,有时候因为文档的错误引导,如下图来自这个文档 的: composer update 这个命令在我们现在的逻辑中,可能会对项目造成巨大伤害. 因为 comp ...

随机推荐

  1. Debian关闭防火墙命令详解

    防火墙是保护计算机系统安全的关键组件.在一些情况下,需要关闭防火墙,以允许特定的应用程序或服务访问网络.在Debian系统中关闭防火墙的方法多种多样,本文将从多个方面对Debian关闭防火墙命令进行详 ...

  2. jacoco代码覆盖率报告分析

    一.目的 对Jacoco代码覆盖率统计维度.报告字段说明.报告详细分析描述.并为精准测试.健壮性测试提供指导. 二.Jacoco代码覆盖率统计维度 Jacoco是从代码指令(Instructions, ...

  3. Qt编写视频监控系统71-外网访问摄像头等设备(获取各种信息及拉流)

    一.前言 最近遇到个需求是通过外网接入摄像机或者NVR,通用的做法是将视频流推流到服务器,然后拉取rtmp视频流,这样就多了服务器的要求,而且实现的功能有限比如不能直接用onvif协议对设备获取信息和 ...

  4. Qt编写安防视频监控系统50-地图配置

    一.前言 视频监控系统中集成了百度地图模块,支持在线和离线,离线的需要先把离线的瓦片地图下载到本地放到对应文件夹才可以正常使用,瓦片地图其实就是一张张图片,按照约定的规则,经纬度值+缩放比例进行排列, ...

  5. Qt开源作品1-视频流播放ffmpeg内核

    一.前言 好久以前就写过这个工具,后来因为Qt版本的不断升级以及ffmpeg也经历过好多次的迭代,可能从官网下载的ffmpeg搭配原来的代码不能正确编译,因为很多api已经变了,所以这次特意抽空全部整 ...

  6. 大型IM稳定性监测实践:手Q客户端性能防劣化系统的建设之路

    本文来自腾讯手Q基础架构团队杨萧玉.邱少雄.张自蹊.王褚重天.姚伟斌的分享,原题"QQ 客户端性能稳定性防劣化系统 Hodor 技术方案",下文进行了排版和内容优化. 1.引言 接 ...

  7. 网页端IM通信技术快速入门:短轮询、长轮询、SSE、WebSocket

    本文来自"糊糊糊糊糊了"的分享,原题<实时消息推送整理>,有优化和改动. 1.写在前面 对Web端即时通讯技术熟悉的开发者来说,我们回顾网页端IM的底层通信技术,从短轮 ...

  8. OpenMMLab AI实战营 第六课笔记

    OpenMMLab AI实战营 第六课笔记 目录 OpenMMLab AI实战营 第六课笔记 1.什么是语义分割 1.1 语义分割的应用 1.1.1 应用:无人驾驶汽车 1.1.2 应用:人像分割 1 ...

  9. Java经典面试36题和答案

    1."static"关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法? "static"关键字表明一个成员 ...

  10. useMemo和useCallback的使用

    useMemo const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]); 把"创建" ...