前情提要

我们第一节的时候,已经大致介绍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. Qt音视频开发25-ffmpeg音量设置

    一.前言 音视频的播放.关闭.暂停.继续这几个基本功能,绝大部分人都是信手拈来的搞定,关于音量调节还是稍微饶了下弯弯,最开始打算采用各个系统的api来处理,坐下来发现不大好,系统的支持不完美,比如有些 ...

  2. Qt编写安防视频监控系统34-onvif事件订阅

    一.前言 事件订阅是近期增加的功能,主要是因为遇到越来越多的一个应用场景,能够接收摄像机的报警事件,比如几乎所有的摄像机后面会增加报警输入输出接口,如果用户外接了报警输入,则当触发报警以后,对应的事件 ...

  3. 2020年了,Android后台保活还有戏吗?看我如何优雅的实现!

    1.引言 对于移动端IM应用和消息推送应用的开发者来说,Android后台保活这件事是再熟悉不过了. 自从Android P(即Android 8.0)出现以后,Android已经从系统层面将后台保活 ...

  4. docker导入和导出

    save和export 镜像导入和导出有2种方式,分别为 save和load.export和import save导出的是镜像:export导出的为容器 save导出会保存镜像所有的提交记录:expo ...

  5. VSTO踩坑记录(3)- 用ClickOnce发布outlook插件 - 我数据文件呢?

    概述 上面两篇文章虽然很简略,不过vsto说白了就是winform开发,所以需要说的内容不是很多,下面直接到发布阶段. 这次先介绍ClickOnce的发布方式,默认右击项目 - 发布,就是这种方式. ...

  6. Windows下的GDAL环境配置

    Windows下的GDAL环境配置 在Windows下GDAL环境的配置方式有很多种,我尝试了很多不同的配置方式,包括Anaconda. GISInternals.QGIS.OSGeo4W等, 我这里 ...

  7. torque提交作业

    PBS(Protable Batch System)是功能最为齐全,历史最悠久,支持最广泛的本地集群调度器之一. PBS的目前包括openPBS,PBS Pro和Torque三个主要分支.其中Open ...

  8. CDS标准视图:PM通知单 I_LocationAnalysisCube

    视图名称:PM通知单 I_LocationAnalysisCube 视图类型:分析 视图代码: 点击查看代码 @EndUserText.label: 'Location Analysis - Cube ...

  9. c# C#设置WebBrowser使用Edge内核

    开始尝试是用 Microsoft.Toolkit.Forms.UI.Controls.WebView,后来发现一大堆问题,还要求WIN10 SDK的版本之类的. 网上看到的简单的解决办法(只需要修改注 ...

  10. 开源的分布式事务解决方案-Seata

    Seata 是什么? (1)Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务. (2)在 Seata 开源之前,Seata 对应的内部版本在阿里经济 ...