通过引入简化的应用程序结构

news/2025/3/12 23:42:05/文章来源:https://www.cnblogs.com/iop2012/p/18768940

好久没更新了,最近新项目在使用laravel11(截止目前发文,laravel12也发布了)做开发,自己也是利用有些空闲时间做些除开业务以外的深入学习,因此也就萌生了做一个系列随笔文章的想法。

laravel11

Laravel 11 继续改进 Laravel 10.x,通过引入简化的应用程序结构、每秒速率限制、健康路由、优雅的加密密钥轮换、队列测试改进、Resend 邮件传输、Prompt 验证器集成、新的 Artisan 命令等。此外,Laravel Reverb,一个官方的可扩展 WebSocket 服务器也被引入,为您的应用程序提供强大的实时功能。

————————————————

开篇

回到顶部

laravel Reverb

Laravel Reverb 由 Joe Dixon 开发。Laravel Reverb 为 Laravel 应用程序带来了极速且可扩展的实时 WebSocket 通信,并与 Laravel 现有的事件广播工具(如 Laravel Echo)无缝集成。此外,Reverb 支持通过 Redis 的发布 / 订阅功能进行水平扩展,使您能够将 WebSocket 流量分布在多个后端 Reverb 服务器上,从而支持单个高需求应用程序。
有关 Laravel Reverb 的更多信息,请查阅完整的 Reverb 文档。

回到顶部

开发原由

24年出了一些关于Reverb混响的一些随笔,最近也简单跟踪了下它的源码,laravel无愧于设计大神,Joe Dixon 大佬的封装设计实现非常到位,以至于云里雾里的。Reverb在ws+http混合服务使用的react-php实现,想着国内(个人认知,不代表所有)用它不多,多是swoole、workerman。于是就想到了用swoole来复刻一个版本,一开始,准备基于Reverb来扩展swoole并支持替换react-php。发现代码设计关联很多,我个人难以撼动,于是另辟蹊径,做一个新的扩展包。

因此,在本系列文章中,我将分享如何从零开始为 Laravel11 开发一个自定义扩展包——Swoole-Reverb,目前这个扩展包我也抽空开发,在开发过程中,我遇到了一些问题,如果我觉得有用,我会第一时间总结一些方案,希望能为大家提供一些参考和帮助。最后,也希望能够像到Joe Dixon大神的水准看齐。

回到顶部

一、项目结构和初始设置

首先,我们在 Laravel 应用的同级目录下创建了一个 core 目录,并在其中放置 Swoole-Reverb 扩展包的代码。基本的目录结构如下:

project-root/
├── app/
├── core/
│   └── SwooleReverb/
│       └── src/
│           ├── Providers/
│           │   ├── BroadcastServiceProvider.php
│           │   └── SwooleReverbServiceProvider.php
│           └── Broadcasting/
│               └── SwooleBroadcaster.php
└── composer.json

在主项目的 composer.json 文件中,我们通过 autoload 配置引入了 Swoole-Reverb 的命名空间:

"autoload": {"psr-4": {"App\\": "app/","Database\\Factories\\": "database/factories/","Database\\Seeders\\": "database/seeders/","SwooleReverb\\": "core/SwooleReverb/src/"}
}

同时,在 extra 部分配置了 Laravel 的自动发现信息:

"extra": {"laravel": {"providers": ["SwooleReverb\\Providers\\BroadcastServiceProvider","SwooleReverb\\Providers\\SwooleReverbServiceProvider"]}
}

目前考虑到开发方便,一开始的操作是这样的,后期在做独立包。

注意:自动发现机制只针对通过 Composer 安装到 vendor 目录中的包生效。如果你把包直接放在项目根目录外(比如 core 目录下),Laravel 不会自动发现这些包。解决办法可以是通过 本地路径仓库 将包安装进 vendor 中,或者直接手动注册服务提供者。

 

 

 

 

 

 

 

 

 


meipian.cn/5bhrsgve?share_depth=1
meipian.cn/5bhrxr5p?share_depth=1
meipian.cn/5bhry7yy?share_depth=1
meipian.cn/5bhrynu8?share_depth=1
meipian.cn/5bhrz388?share_depth=1
meipian.cn/5bhrzpjz?share_depth=1
meipian.cn/5bhs048n?share_depth=1
meipian.cn/5bhs19gj?share_depth=1
meipian.cn/5bhs0job?share_depth=1
meipian.cn/5bhs227g?share_depth=1
meipian.cn/5bhs2w45?share_depth=1
meipian.cn/5bhs3g6x?share_depth=1
meipian.cn/5bhs4045?share_depth=1
meipian.cn/5bhs4jmq?share_depth=1
meipian.cn/5bhs52xq?share_depth=1
meipian.cn/5bhs68rg?share_depth=1
meipian.cn/5bhs5njv?share_depth=1
meipian.cn/5bhs7ane?share_depth=1
meipian.cn/5bhs71k8?share_depth=1
meipian.cn/5bhs84fl?share_depth=1
meipian.cn/5bhs7qly?share_depth=1
meipian.cn/5bhs8ey3?share_depth=1
meipian.cn/5bhs8xol?share_depth=1
meipian.cn/5bhs9e5l?share_depth=1
meipian.cn/5bhsa27d?share_depth=1
meipian.cn/5bhsaenr?share_depth=1
meipian.cn/5bhsaq55?share_depth=1
meipian.cn/5bhsdh15?share_depth=1
meipian.cn/5bhse6iv?share_depth=1
meipian.cn/5bhsdtzv?share_depth=1
meipian.cn/5bhsen67?share_depth=1
meipian.cn/5bhsf20l?share_depth=1
meipian.cn/5bhsi901?share_depth=1
meipian.cn/5bhsim31?share_depth=1
meipian.cn/5bhslqcj?share_depth=1
meipian.cn/5bhsm3bx?share_depth=1
meipian.cn/5bhsmr9d?share_depth=1
meipian.cn/5bhsnp4u?share_depth=1
meipian.cn/5bhsncir?share_depth=1
meipian.cn/5bhso1m5?share_depth=1
meipian.cn/5bhspysr?share_depth=1
meipian.cn/5bhsonja?share_depth=1
meipian.cn/5bhsqg8s?share_depth=1
meipian.cn/5bhsr834?share_depth=1
meipian.cn/5bhsqwh5?share_depth=1
meipian.cn/5bhss72t?share_depth=1
meipian.cn/5bhsrp7r?share_depth=1
meipian.cn/5bht06n6?share_depth=1
meipian.cn/5bht0kj8?share_depth=1
meipian.cn/5bht14l3?share_depth=1
meipian.cn/5bht1f29?share_depth=1
meipian.cn/5bht3442?share_depth=1
meipian.cn/5bht3ob4?share_depth=1
meipian.cn/5bht4bmv?share_depth=1
meipian.cn/5bht4uff?share_depth=1
meipian.cn/5bht62bp?share_depth=1
meipian.cn/5bht55tr?share_depth=1
meipian.cn/5bht6tds?share_depth=1
meipian.cn/5bht7isz?share_depth=1
meipian.cn/5bht83mk?share_depth=1
meipian.cn/5bht8ely?share_depth=1
meipian.cn/5bht8sv7?share_depth=1
meipian.cn/5bht97uz?share_depth=1
meipian.cn/5bht9qog?share_depth=1
meipian.cn/5bhtaq76?share_depth=1
meipian.cn/5bhtbitw?share_depth=1
meipian.cn/5bhtezdq?share_depth=1
meipian.cn/5bhtfcwu?share_depth=1
meipian.cn/5bhtfr82?share_depth=1
meipian.cn/5bhtgtz8?share_depth=1
meipian.cn/5bhtgh6s?share_depth=1
meipian.cn/5bhthese?share_depth=1
meipian.cn/5bhth4kp?share_depth=1
meipian.cn/5bhthuz1?share_depth=1
meipian.cn/5bhtifwb?share_depth=1
meipian.cn/5bhtlpfp?share_depth=1
meipian.cn/5bhtl822?share_depth=1
meipian.cn/5bhtm8em?share_depth=1
meipian.cn/5bhtmmqe?share_depth=1
meipian.cn/5bhtn0d7?share_depth=1
meipian.cn/5bhtnrcn?share_depth=1
meipian.cn/5bhtnemg?share_depth=1
meipian.cn/5bhtq0ln?share_depth=1
meipian.cn/5bhtqwi9?share_depth=1
meipian.cn/5bhtqkga?share_depth=1
meipian.cn/5bhtrk6t?share_depth=1
meipian.cn/5bhtrd9b?share_depth=1
meipian.cn/5bhtryss?share_depth=1
meipian.cn/5bhtsni0?share_depth=1
meipian.cn/5bhttpoa?share_depth=1
meipian.cn/5bhtt0hd?share_depth=1
meipian.cn/5bhtw11l?share_depth=1
meipian.cn/5bhtwsue?share_depth=1
meipian.cn/5bhtwhsf?share_depth=1
meipian.cn/5bhtysqd?share_depth=1
meipian.cn/5bhty6cs?share_depth=1
meipian.cn/5bhu4vsl?share_depth=1
meipian.cn/5bhu60iv?share_depth=1
meipian.cn/5bhu6pfy?share_depth=1
meipian.cn/5bhu7vc8?share_depth=1
meipian.cn/5bhu7eza?share_depth=1
meipian.cn/5bhu8ccc?share_depth=1
meipian.cn/5bhu8pzx?share_depth=1
meipian.cn/5bhu9iki?share_depth=1
meipian.cn/5bhu98ak?share_depth=1
meipian.cn/5bhua29y?share_depth=1
meipian.cn/5bhuamr6?share_depth=1
meipian.cn/5bhub0ek?share_depth=1
meipian.cn/5bhud4ww?share_depth=1
meipian.cn/5bhudxcl?share_depth=1
meipian.cn/5bhuedh9?share_depth=1
meipian.cn/5bhueut0?share_depth=1
meipian.cn/5bhufamk?share_depth=1
meipian.cn/5bhufwo1?share_depth=1
meipian.cn/5bhujoni?share_depth=1
meipian.cn/5bhuk2p6?share_depth=1
meipian.cn/5bhukw4d?share_depth=1
meipian.cn/5bhuklj3?share_depth=1
meipian.cn/5bhulmpu?share_depth=1
meipian.cn/5bhul8e5?share_depth=1
meipian.cn/5bhum661?share_depth=1
meipian.cn/5bhumjo2?share_depth=1
meipian.cn/5bhun9yc?share_depth=1
meipian.cn/5bhumxcp?share_depth=1
meipian.cn/5bhuo0kf?share_depth=1
meipian.cn/5bhunmr8?share_depth=1
meipian.cn/5bhuot6f?share_depth=1
meipian.cn/5bhuodwx?share_depth=1
meipian.cn/5bhupb50?share_depth=1
meipian.cn/5bhupo0e?share_depth=1
meipian.cn/5bhuq38t?share_depth=1
meipian.cn/5bhuqlav?share_depth=1
meipian.cn/5bhur2nw?share_depth=1
meipian.cn/5bhuriel?share_depth=1
meipian.cn/5bhuruum?share_depth=1
meipian.cn/5bhmkft2?share_depth=1
meipian.cn/5bhmk9k4?share_depth=1
meipian.cn/5bhmm2we?share_depth=1
meipian.cn/5bhmlr7e?share_depth=1
meipian.cn/5bhmmfbe?share_depth=1
meipian.cn/5bhmn1m3?share_depth=1
meipian.cn/5bhmnbwc?share_depth=1

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/897943.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最好的百度提交每日自动提交工具【免费】

原文链接 JavaGuide最好的百度提交每日自动提交工具【免费】github https://github.com/nogeek-cn/baidu-seo-auto-push-dailygitee https://gitee.com/nogeek-cn/baidu-seo-auto-push-daily本工具比别的工具好的地方【免费:你只需要在你的网站中添加我的网站友链,我就可以帮…

定义了一个实现了toDo()抽象方法

定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。 结构 策略模式的主要角色…

《AI帮你赢:人人都能用的AI方法论》 PDF免费下载

本书强调“把 AI作为方法”(AI即 Artifcial Intelligence,人工智能)这一核心理念,旨在引导读者掌握与 AI对话的关键技巧,并将AI融入工作和生活真正体验 AI带给人类的高效与便捷。 本书适合对 AI有研究兴趣、有使用需求、有产品研发需求或有投资意向的读者阅读。读者可扫描文…

20241417 2024-2025-2 《Python程序设计》实验一报告

20241417 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2414 姓名: 罗若元 学号:20241417 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序…

高性能计算-探究GPU延迟隐藏(26)

1. 延迟隐藏作用:可以最大化线程束的使用效率,提高计算性能 2. 延迟隐藏概念 (1)指令延迟是指令发出到完成之间的时钟周期间隔; (2)指令可以分为两种:算数指令和访存指令。 3. 算数指令延迟隐藏实现 (1)假如一个算数指令的指令延迟是 4 个时钟周期 (2)查询cuda文档…

毒王正传:初出江湖

忽见江湖风云变, 协议如雪落满天。 十方少侠争破译, 哪知此物带瘟烟。楔子混沌起微澜忽见江湖风云变,协议如雪落满天。十方少侠争破译,哪知此物带瘟烟。话说那日产品大殿突发英雄帖:"今有通天协议问世,三日接入者赏鸡腿三筐!"众客户端少侠摩拳擦掌,却不知正堕…

uniapp 开发微信小程序自定义背景图与导航栏

uniapp 开发微信小程序自定义背景图与导航栏 1、page.json中使用custom自定义导航栏{"path": "pages/store/store","style": {"navigationBarTitleText": "店铺详情","navigationStyle": "custom" //自…

Redis--Lesson06--Redis进阶2

一.Redis持久化之RDB Redis的RDB持久化机制是通过快照(snapshot)的形式将存储在内存中的数据以一定的时间间隔保存到硬盘上。以下是RDB持久化的具体流程: 触发条件:RDB文件可以通过配置文件设置自动触发(例如,根据时间或修改次数),也可以手动通过命令SAVE或BGSAVE来触发。…

Spring Security-web安全框架

进入移动互联网时代,大家每天都在刷手机,常用的软件有微信、支付宝、头条等,下边拿微信来举例子说明认证相关的基本概念,在初次使用微信前需要注册成为微信用户,然后输入账号和密码即可登录微信,输入账号和密码登录微信的过程就是认证。Spring Security 1. 基本概念 1.1 …

SpringBoot文件上传到数据库

SpringBoot文件上传到数据库 首先导入了相应的jar包 <!--thymeleaf--> <dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring5</artifactId> </dependency> <dependency><groupId>org.thymeleaf.…

供应链系统中的 “计划单、订单、通知单,入库 / 出库单” 的区别

在供应链管理中,各种单据是业务流程的核心纽带,但它们之间的区别和联系常常让新手感到困惑。本文从采购和销售两大业务场景出发,详细拆解了“计划单、订单、通知单、入库/出库单”等常见单据的定义、作用及相互关系。在供应链系统中,经常会听到一些名字相近,但是意思可能略…