百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Laravel11 Laravel-Reverb-超快且可扩展的实时 WebSocket 通信

off999 2025-03-19 01:02 27 浏览 0 评论

大家好呀,我是yangyang.今天带来Laravel11尝鲜的新一期,如果没有看过的朋友可以先看看laravel11的重要更新《laravel11发行说明》,然后今天的主要内容是介绍laravel11中广播系统的新驱动Laravel-Reverb.

介绍

Laravel Reverb直接为您的 Laravel 应用程序带来超快且可扩展的实时 WebSocket 通信,并提供与 Laravel 现有事件广播工具套件的无缝集成。

安装

您可以使用 Artisan 命令安装 Reverb install:broadcasting:

php artisan install:broadcasting       

配置

该命令将使用一组合理的默认配置选项安装 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
            


允许的来源

您还可以通过更新配置文件部分allowed_origins中的配置值来定义客户端请求的来源。来自未在您允许的来源中列出的来源的任何请求都将被拒绝。您可以使用以下方式允许所有来源:appsconfig/reverb.php*

'apps' => [

 [

'id' => 'my-app-id',

'allowed_origins' => ['laravel.com'],

// ...

 ]

]
            


附加应用

通常,Reverb 为其安装的应用程序提供 WebSocket 服务器。然而,可以使用单个 Reverb 安装来服务多个应用程序。

例如,您可能希望维护一个 Laravel 应用程序,该应用程序通过 Reverb 为多个应用程序提供 WebSocket 连接。这可以通过apps在应用程序的config/reverb.php配置文件中定义多个来实现:

'apps' => [

 [

'id' => 'my-app-one',

// ...

 ],

 [

'id' => 'my-app-two',

// ...

 ],

],


            

SSL协议

在大多数情况下,安全的 WebSocket 连接在请求被代理到 Reverb 服务器之前由上游 Web 服务器(Nginx 等)处理。

但是,有时(例如在本地开发期间)Reverb 服务器直接处理安全连接可能很有用。如果您正在使用Laravel Herd 的安全站点功能,或者您正在使用Laravel Valet并针对您的应用程序运行了secure 命令,您可以使用为您的站点生成的 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。

tls您还可以通过在应用程序的配置文件中定义选项来手动选择证书config/reverb.php。在选项数组中,您可以提供PHP 的 SSL 上下文选项tls支持的任何选项:

'options' => [

'tls' => [

'local_cert' => '/path/to/cert.pem'

 ],

],
            


运行服务器

可以使用reverb:startArtisan 命令启动混响服务器:

php artisan reverb:start
            


默认情况下,混响服务器将在 启动0.0.0.0:8080,从而可以从所有网络接口访问它。

如果您需要指定自定义主机或端口,您可以在启动服务器时通过--host和选项来执行此操作:--port

php artisan reverb:start --host=127.0.0.1 --port=9000
            


或者,您可以在应用程序的配置文件中定义环境REVERB_SERVER_HOST变量。REVERB_SERVER_PORT.env

调试

为了提高性能,Reverb 默认情况下不输出任何调试信息。如果您想查看通过混响服务器的数据流,您可以--debug向reverb:start命令提供选项:

php artisan reverb:start --debug
            


重启

由于 Reverb 是一个长期运行的进程,因此如果不通过reverb:restartArtisan 命令重新启动服务器,对代码的更改将不会得到反映。

该reverb:restart命令确保在停止服务器之前正常终止所有连接。如果您使用进程管理器(例如 Supervisor)运行 Reverb,则在所有连接终止后,进程管理器将自动重新启动服务器:

php artisan reverb:restart
            


监控

可以通过与Laravel Pulse集成来监控混响。通过启用 Reverb 的 Pulse 集成,您可以跟踪服务器正在处理的连接和消息的数量。

要启用集成,您应该首先确保已安装 Pulse。然后,将任何 Reverb 录音机添加到应用程序的config/pulse.php配置文件中:

use Laravel\Reverb\Pulse\Recorders\ReverbConnections;

use Laravel\Reverb\Pulse\Recorders\ReverbMessages;

'recorders' => [

ReverbConnections::class => [

'sample_rate' => 1,

 ],

ReverbMessages::class => [

'sample_rate' => 1,

 ],

...

],
            

接下来,将每个记录器添加到您的仪表板:







 ...


            


在生产中运行Reverb

由于 WebSocket 服务器的长期运行特性,您可能需要对服务器和托管环境进行一些优化,以确保您的 Reverb 服务器能够有效地处理服务器上可用资源的最佳连接数。

[!注意]如果您的站点由Laravel Forge
管理,您可以直接从“应用程序”面板自动优化服务器的 Reverb。通过启用 Reverb 集成,Forge 将确保您的服务器已做好生产准备,包括安装任何所需的扩展并增加允许的连接数量。

打开文件

每个 WebSocket 连接都保存在内存中,直到客户端或服务器断开连接。在 Unix 和类 Unix 环境中,每个连接都由一个文件表示。然而,在操作系统和应用程序级别上允许打开的文件数量通常受到限制。

操作系统

在基于 Unix 的操作系统上,您可以使用以下ulimit命令确定允许的打开文件数:

ulimit -n
            


该命令将显示不同用户允许的打开文件限制。您可以通过编辑/etc/security/limits.conf文件来更新这些值。例如,将用户的最大打开文件数更新为 10,000 个,forge如下所示:

# /etc/security/limits.conf

forge soft nofile 10000

forge hard nofile 10000
            


事件循环

在底层,Reverb 使用 ReactPHP 事件循环来管理服务器上的 WebSocket 连接。默认情况下,此事件循环由 提供支持stream_select,不需要任何额外的扩展。但是,stream_select通常限制为 1,024 个打开文件。因此,如果您计划处理超过 1,000 个并发连接,则需要使用不受相同限制的替代事件循环。

如果可用,混响将自动切换到ext-event、ext-ev或ext-uv有源循环。所有这些 PHP 扩展都可以通过 PECL 安装:

pecl install event

# or

pecl install ev

# or

pecl install uv
            


网络服务器

在大多数情况下,Reverb 在服务器上的非面向 Web 的端口上运行。因此,为了将流量路由到 Reverb,您应该配置反向代理。假设 Reverb 在主机0.0.0.0和端口上运行8080,并且您的服务器使用 Nginx Web 服务器,则可以使用以下 Nginx 站点配置为您的 Reverb 服务器定义反向代理:

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;

 }

 ...

}
            


通常,Web 服务器配置为限制允许的连接数量,以防止服务器过载。要将 Nginx Web 服务器上允许的连接数增加到 10,000,应更新文件的worker_rlimit_nofile和值:
worker_connectionsnginx.conf

user forge;

worker_processes auto;

pid /run/nginx.pid;

include /etc/nginx/modules-enabled/*.conf;

worker_rlimit_nofile 10000;

events {

 worker_connections 10000;

 multi_accept on;

}
            


上面的配置将允许每个进程最多生成 10,000 个 Nginx 工作线程。此外,此配置将 Nginx 的打开文件限制设置为 10,000。

端口范围

基于 Unix 的操作系统通常会限制服务器上可以打开的端口数量。您可以通过以下命令查看当前允许的范围:

cat /proc/sys/net/ipv4/ip_local_port_range

# 32768 60999
            

上面的输出显示服务器最多可以处理 28,231 (60,999 - 32,768) 个连接,因为每个连接都需要一个空闲端口。尽管我们建议水平扩展以增加允许的连接数,但您可以通过更新服务器配置文件中允许的端口范围来增加可用的开放端口数/etc/sysctl.conf。

守护进程

在大多数情况下,您应该使用进程管理器(例如 Supervisor)来确保 Reverb 服务器持续运行。如果您使用 Supervisor 运行 Reverb,则应更新minfds服务器supervisor.conf文件的设置,以确保 Supervisor 能够打开处理与 Reverb 服务器的连接所需的文件:

[supervisord]

...

minfds=10000
            


水平扩展

如果您需要处理的连接数量超过单个服务器允许的数量,您可以水平扩展Reverb服务器。利用 Redis 的发布/订阅功能,Reverb 能够管理跨多个服务器的连接。当应用程序的 Reverb 服务器之一收到消息时,该服务器将使用 Redis 将传入消息发布到所有其他服务器。

要启用水平扩展,您应该在应用程序的配置文件中将REVERB_SCALING_ENABLED环境变量设置为:true.env

REVERB_SCALING_ENABLED=true

接下来,您应该有一个专用的中央 Redis 服务器,所有 Reverb 服务器都将与该服务器进行通信。 Reverb 将使用为您的应用程序配置的默认 Redis 连接将消息发布到所有 Reverb 服务器。

启用 Reverb 的扩展选项并配置 Redis 服务器后,您只需在reverb:start能够与 Redis 服务器通信的多个服务器上调用该命令即可。这些 Reverb 服务器应放置在负载平衡器后面,该负载平衡器在服务器之间均匀分配传入请求。

相关推荐

Python自动化脚本应用与示例(python自动化脚本教程)

Python是编写自动化脚本的绝佳选择,因其语法简洁、库丰富且跨平台兼容性强。以下是Python自动化脚本的常见应用场景及示例,帮助你快速上手:一、常见自动化场景文件与目录操作O批量重命名文件...

如何使用Python实现一个APP(如何用python做一个程序)

要使用Python实现一个APP,你可以选择使用一些流行的移动应用开发框架,如Kivy、PyQt或Tkinter。这里以Kivy为例,它是一个跨平台的Python框架,可以用于创建漂亮的图形用户界面(...

免费定时运行Python程序并存储输出文档的服务推荐

免费定时运行Python程序并存储输出文档的服务推荐以下是几种可以免费定时运行Python程序并存储输出结果的云服务方案:1.PythonAnywhere特点:提供免费的Python托管环境支持定时...

【Python程序开发系列】如何让python脚本一直在后台保持运行

这是我的第385篇原创文章。一、引言让Python脚本在后台持续运行,有几种常见的方式,具体方式可以根据你的系统环境和需求选择。二、Linux或macOS系统2.1使用nohup命令no...

运行和执行Python程序(运行python的程序)

一、Python是一种解释型的脚本编程语言,这样的编程语言一般支持两种代码运行方式:交互式编程在命令行窗口中直接输入代码,按下回车键就可以运行代码,并立即看到输出结果;执行完一行代码,你还可以继续...

Python 初学者指南:计算程序的运行时长

在编写Python程序时,了解程序的运行时长是一项很有用的技能。这不仅能帮助你评估代码的效率,还能在优化程序性能时提供关键的数据支持。对于初学者来说,计算程序运行时长其实并不复杂,接下来就让我们看...

pyest+appium实现APP自动化测试,思路全总结在这里

每天进步一点点,关注我们哦,每天分享测试技术文章本文章出自【码同学软件测试】码同学公众号:自动化软件测试码同学抖音号:小码哥聊软件测试01appium环境搭建安装nodejshttp://nodej...

血脉觉醒后,编程小白我是如何通过Deepseek和Trae轻松开发软件的

以下就是作为一个编程小白的我,是如何一步步开发软件的保姆级教程,请点赞收藏:第一步:打开#deepseek#(首先关闭深度思考和联网搜索)输入或复制你要让它做一个什么样软件的要求和提示词(你可以先用...

我用Deepseek+Trae写的python小软件,小白也能轻松用上模型啦!

利用AI大模型deepseek,搭配TraeCN,用半个小时做了一个本地Ollama安装部署和一键卸载的小工具,哈哈哈!感觉还不错#deepseek#一直想做一个本地Ollama安装部署和一键卸载...

在安卓设备上运行Python的方法(安卓能运行python吗)

技术背景在安卓设备上运行Python可以为开发者提供更多的开发选择和灵活性,能够利用Python丰富的库和简洁的语法来开发各种应用,如游戏、脚本工具等。然而,由于安卓系统原生不支持Python,需要借...

零基础小白,DeepSeek全自动编程,超详细提示词,一键生成软件!

我前面发表了文章,详细说了编程零基础小白,如何利用DeepSeek进行编程的全过程,感兴趣的可以去看看:DeepSeek全自动编程很多人不会写提示词,不知道怎么开始对话。话不多说,请先看下图中的对话,...

小白用DeepSeek+Python编写软件(用python制作软件)

周末无事,用DeepSeek生成全部代码,写了一个mp3音乐播放器,几分钟搞定,DeepSeek确实太强大了。我的提示语是这么写的:“请用Python语言写一个音乐播放器,支持常见音乐格式,我是Pyt...

零基础使用DeepSeek开发Windows应用程序,超简单超实用!

你敢相信,我居然用DeepSeek开发了一个能用的Windows软件!整个过程就像和学霸同桌组队做作业,我负责提需求,DeepSeek负责写代码改bug,全程碰到任何问题直接丢给DeepSeek即可。...

第二篇:如何安装Python并运行你的第一个程序

欢迎回到我的Python入门教程系列!在上一篇中,我们讨论了为什么Python是一门值得学习的编程语言。今天,我们将迈出第一步:安装Python并运行你的第一个程序。无论你是Windows、macOS...

Python 运行,带你找入口,快速读懂程序

有C或Java编程开发经验的软件开发者,初次接触python程序,当你想快速读懂python项目工程时,是否觉得python程序有些太过随意,让你看有些无所适从,进而有些茫然。这是...

取消回复欢迎 发表评论: