Hyperf Nano 极简框架实战:单文件、零配置、闭包风格快速构建 Hyperf 应用
后端Web框架微服务RPC框架异步编程【免费下载链接】hyperf A coroutine framework that focuses on hyperspeed and flexibility. Building microservice or middleware with ease.项目地址https://gitcode.com/hyperf/hyperf点击查看免费下载本文围绕 Hyperf 官方生态中的hyperf/nano组件展开它是 Hyperf 的一个极简发行版无需脚手架Skeleton、零配置仅用一个 PHP 文件即可启动一个完整的 Hyperf 应用。本文将完整讲解它的安装方式、快速开始流程、闭包风格 API 以及路由、DI 容器、中间件、异常处理、命令行、事件监听、自定义进程、定时任务、Hyperf 组件集成等全部实战用法并结合本仓库中的相关源码如 DB 组件、StdoutLoggerInterface 等说明其底层原理。读完本文你将掌握用 Nano 在几十行代码内搭建协程 Web 服务、命令行工具与后台任务的能力。什么是 hyperf/nanohyperf/nano将整个 Hyperf 框架压缩到单个 PHP 文件中。在传统 Hyperf 项目中你需要通过骨架Skeleton创建包含config/、app/、bin/等目录的完整工程并维护大量配置文件而使用 Nano 时你只需一个index.php在其中通过Hyperf\Nano\Factory\AppFactory创建应用实例用闭包风格注册路由与各种能力最后调用$app-run()启动即可。它非常适合以下场景快速原型验证PoC与脚本化服务微服务中的轻量边缘服务、健康检查端点演示、教学与测试环境希望把应用打包为 Phar 单文件的部署场景。特性一览Nano 官方文档明确列出的特性如下特性说明无骨架No Skeleton不需要创建 Hyperf 工程骨架目录零配置Zero Config开箱即用无需编写config/配置文件快速启动Fast Startup单文件加载启动开销小闭包风格Closure Style路由、中间件、命令等均以闭包注册支持注解外的全部 Hyperf 功能除 Annotation注解体系外均可使用兼容全部 Hyperf 组件DB、Redis、AMQP、gRPC 等组件可直接引用Phar 友好Phar Friendly便于打包为 Phar 分发其中支持注解外的全部 Hyperf 功能是关键约束Nano 以闭包替代注解驱动的路由、AOP 切面注册等能力因此基于注解的控制器风格在 Nano 中不适用但组件级能力数据库、缓存、队列、事件等不受影响。安装 hyperf/nano在已初始化 Composer 的项目目录中执行composer require hyperf/nano安装完成后项目下会生成vendor/autoload.php。Nano 是独立分发的包可安装到任意 PHP 8.0以当前 Composer 依赖约束为准且已安装 Swoole 扩展的环境中。安装后即可直接编写单文件应用无需执行composer install之外的任何初始化命令。快速开始第一个单文件应用创建index.php内容如下完整保留自官方文档?php // index.php use Hyperf\Nano\Factory\AppFactory; require_once __DIR__ . /vendor/autoload.php; $app AppFactory::create(0.0.0.0, 9051); $app-get(/, function () { $user $this-request-input(user, nano); $method $this-request-getMethod(); return [ message hello {$user}, method $method, ]; }); $app-run();启动服务php index.php start简洁如此——一个可运行的 Hyperf HTTP 服务就诞生了。随后访问http://127.0.0.1:9051/?userhyperf将得到{message: hello hyperf, method: GET}对这段代码做几点拆解AppFactory::create(0.0.0.0, 9051)创建应用实例前两个参数为监听地址与端口从官方其余示例可见AppFactory::create()也可以不传参数直接使用默认地址与端口。$app-get(/path, Closure)以闭包注册 HTTP 路由处理器。闭包内的$this被绑定为Hyperf\Nano\ContainerProxy详见下文 DI 容器一节因此可以直接通过$this-request访问当前 PSR-7 请求对象input()读取查询参数并支持默认值getMethod()获取 HTTP 方法。闭包直接返回数组Nano 会自动将其序列化为 JSON 响应。$app-run()启动应用并阻塞运行。start是 Nano 提供的服务器管理命令与 Swoole 常驻进程的管理方式一致此外还支持stop、restart等常规命令。更多实战示例1. 路由集成 Hyperf 路由器的全部方法$app集成了 Hyperf 路由器Router的所有方法包括get、post、put、delete、addRoute、addGroup等。下面演示路由分组与带正则约束的参数路由?php use Hyperf\Nano\Factory\AppFactory; require_once __DIR__ . /vendor/autoload.php; $app AppFactory::create(); $app-addGroup(/nano, function () use ($app) { $app-addRoute([GET, POST], /{id:\d}, function($id) { return /nano/.$id; }); $app-put(/{name:.}, function($name) { return /nano/.$name; }); }); $app-run();要点说明addGroup(/nano, Closure)为一组路由添加统一前缀addRoute([GET, POST], /{id:\d}, ...)表示该路径同时接受 GET 与 POST 方法{id:\d}使用正则约束参数只能为数字路由参数会自动注入闭包形参$idput(/{name:.}, ...)演示了 PUT 方法与通配正则参数{name:.}路由匹配失败会落入 404 响应这与完整版 Hyperf 的路由行为一致。2. DI 容器$this即 ContainerProxyNano 管理的所有闭包回调包括中间件、异常处理器等中$this都被绑定到Hyperf\Nano\ContainerProxy。这意味着你可以在闭包内直接使用容器能力?php use Hyperf\Nano\ContainerProxy; use Hyperf\Nano\Factory\AppFactory; require_once __DIR__ . /vendor/autoload.php; class Foo { public function bar() { return bar; } } $app AppFactory::create(); $app-getContainer()-set(Foo::class, new Foo()); $app-get(/, function () { /** var ContainerProxy $this */ $foo $this-get(Foo::class); return $foo-bar(); }); $app-run();$app-getContainer()返回 Hyperf 的 DI 容器实例可调用set()手动注册对象对应完整版 Hyperf 中 DI 组件 的能力闭包内$this-get(Foo::class)即从容器解析依赖ContainerProxy还代理了容器与request、response等上下文对象所以前文的$this-request才能直接使用借助容器你可以像在完整 Hyperf 中一样面向接口编程、按需装配服务。3. 中间件PSR-7 请求/响应管道通过addMiddleware注册中间件闭包签名为function ($request, $handler)返回$handler-handle($request)的结果以继续管道?php use Hyperf\Nano\Factory\AppFactory; require_once __DIR__ . /vendor/autoload.php; $app AppFactory::create(); $app-get(/, function () { return $this-request-getAttribute(key); }); $app-addMiddleware(function ($request, $handler) { $request $request-withAttribute(key, value); return $handler-handle($request); }); $app-run();访问/将得到value说明请求对象在中间件中携带的属性被传递到了路由闭包。这里有一条通用规则除了闭包之外所有$app-addXXX()方法addMiddleware、addExceptionHandler、addListener、addProcess等同样接受类名作为参数可以传入任意对应的 Hyperf 类如标准的中间件类让 Nano 应用复用现有类库。4. 异常处理自定义异常响应通过addExceptionHandler注册全局异常处理器闭包签名为function ($throwable, $response)?php use Hyperf\HttpMessage\Stream\SwooleStream; use Hyperf\Nano\Factory\AppFactory; require_once __DIR__ . /vendor/autoload.php; $app AppFactory::create(); $app-get(/, function () { throw new \Exception(); }); $app-addExceptionHandler(function ($throwable, $response) { return $response-withStatus(418) -withBody(new SwooleStream(I\m a teapot)); }); $app-run();路由闭包抛出\Exception后由异常处理器接管处理器基于 PSR-7 响应对象重建响应withStatus(418)设置 HTTP 状态码418 Im a teapot 为 HTTP 协议中的趣味状态码withBody(new SwooleStream(...))用 SwooleStream 包装响应体——该流实现在本仓库 http-message 组件 中是 Hyperf 标准 HTTP 消息层的一部分多个异常处理器按注册顺序构成处理链这一点与完整版 Hyperf 的异常处理机制exception-handler 组件一致。5. 命令行注册自定义命令用addCommand注册命令命令名作为第一个参数?php use Hyperf\Contract\StdoutLoggerInterface; use Hyperf\Nano\Factory\AppFactory; require_once __DIR__ . /vendor/autoload.php; $app AppFactory::create(); $app-addCommand(echo, function(){ $this-get(StdoutLoggerInterface::class)-info(A new command called echo!); }); $app-run();执行命令php index.php echo命令闭包内同样通过$this-get(StdoutLoggerInterface::class)从容器取出标准输出日志器——StdoutLoggerInterface 定义在 contract 组件 中继承自 PSR-3LoggerInterface其info()等方法可直接打印带颜色的终端日志在 Nano 应用中php index.php start启动服务、php index.php echo执行命令命令与服务器管理命令共享同一入口。6. 事件监听订阅框架生命周期事件用addListener监听 Hyperf 事件事件类与闭包一一对应?php use Hyperf\Contract\StdoutLoggerInterface; use Hyperf\Framework\Event\BootApplication; use Hyperf\Nano\Factory\AppFactory; require_once __DIR__ . /vendor/autoload.php; $app AppFactory::create(); $app-addListener(BootApplication::class, function($event){ $this-get(StdoutLoggerInterface::class)-info(App started); }); $app-run();启动应用时终端会输出 App started。其中 BootApplication 是 framework 组件 中定义的应用启动事件在框架引导完成、应用即将运行时触发。你可以把初始化逻辑如预热缓存、注册资源放在该监听器闭包中。7. 自定义进程常驻后台任务用addProcess注册自定义常驻进程闭包内是进程主循环?php use Hyperf\Contract\StdoutLoggerInterface; use Hyperf\Nano\Factory\AppFactory; require_once __DIR__ . /vendor/autoload.php; $app AppFactory::create(); $app-addProcess(function(){ while (true) { sleep(1); $this-get(StdoutLoggerInterface::class)-info(Processing...); } }); $app-run();该进程由 Swoole 管理随应用一同启动、常驻运行每秒输出一次日志适合承载轮询、消费、定时上报等后台任务此能力对应完整版 Hyperf 的 process 组件。8. 定时任务Cron 表达式调度用addCrontab注册定时任务第一个参数为 Cron 表达式?php use Hyperf\Contract\StdoutLoggerInterface; use Hyperf\Nano\Factory\AppFactory; require_once __DIR__ . /vendor/autoload.php; $app AppFactory::create(); $app-addCrontab(* * * * * *, function(){ $this-get(StdoutLoggerInterface::class)-info(execute every second!); }); $app-run();* * * * * *为六段式 Cron 表达式秒 分 时 日 月 周与完整版 Hyperf 的 crontab 组件 规则一致因此这里表示每秒执行一次定时任务同样运行在常驻进程中由 Nano 内部按 Cron 规则调度闭包。9. 使用 Hyperf 组件以数据库为例Nano 与全部 Hyperf 组件兼容。以 db 组件 为例先通过$app-config([...])注入组件所需的配置再直接使用静态门面Hyperf\DB\DB?php use Hyperf\DB\DB; use Hyperf\Nano\Factory\AppFactory; require_once __DIR__ . /vendor/autoload.php; $app AppFactory::create(); $app-config([ db.default [ host env(DB_HOST, localhost), port env(DB_PORT, 3306), database env(DB_DATABASE, hyperf), username env(DB_USERNAME, root), password env(DB_PASSWORD, ), ] ]); $app-get(/, function(){ return DB::query(SELECT * FROM user WHERE gender ?;, [1]); }); $app-run();说明$app-config([db.default [...]])以键值对形式注入配置db.default即数据库连接池default池的配置段配置项可通过env()辅助函数读取环境变量并设置默认值这一点与完整版 Hyperf 的配置规范一致参见 config 组件 与 db-connection 组件DB::query()是静态调用。从 DB 类实现 可以看到DB通过__callStatic/__call将调用代理到连接池中的真实连接PoolFactory管理连接、支持事务beginTransaction/commit/rollback等方法详见 DB 门面类 的method注释并对连接做了协程上下文管理与释放因此查询天然支持协程化这意味着 Nano 应用可以直接享用 Hyperf 生态的组件能力Redis、缓存、AMQP、gRPC 客户端等皆可按同样的注入配置 使用门面模式接入。适用场景与注意事项综合以上内容使用 Nano 时有几点值得注意注解体系不可用Nano 定位是闭包风格不支持注解Annotation驱动的控制器、AOP 注解切面等。需要注解能力的复杂业务模块应使用标准 Hyperf 骨架工程。组件能力完整除注解外Hyperf 的事件、中间件、进程、定时任务、DI、配置等机制在 Nano 中均可通过$app-addXXX()闭包形式获得组件兼容性有官方文档背书。Phar 友好由于应用是单文件、无额外配置目录便于用 Phar 打包后直接分发运行。依赖前提运行环境需满足 Hyperf 的基本要求Swoole 扩展、Composer 依赖等AppFactory::create()不传参时使用默认监听地址与端口具体默认值以hyperf/nano包内实现为准。快速验证路径从 README 对 Nano 的定位zero-config, no skeleton, minimal Hyperf distribution可以看出Nano 是 Hyperf 官方提供给开发者的一把轻量钥匙适合快速搭建单文件服务而重型业务仍建议回归完整骨架。小结hyperf/nano用最小的成本呈现了 Hyperf 的核心运行模型单文件入口、闭包注册、ContainerProxy 绑定、PSR-7 消息管道、事件与进程机制以及组件化能力。本文从安装、快速开始到九个实战示例完整复现了官方文档的用法并对照本仓库的 DB、StdoutLoggerInterface、BootApplication、SwooleStream 等源码说明了底层实现。当你需要几行代码跑起一个 Hyperf 服务时Nano 就是最直接的答案。赞分享后端Web框架微服务RPC框架异步编程【免费下载链接】hyperf A coroutine framework that focuses on hyperspeed and flexibility. Building microservice or middleware with ease.项目地址https://gitcode.com/hyperf/hyperf点击查看免费下载相关推荐es-toolkit intersection 函数使用指南高效求解两个数组的交集es toolkit intersection 函数使用指南高效求解两个数组的交集 导读 本文围绕 es toolkit 数组工具库中的 intersecti后端微服务Hyperf框架快速入门指南从零开始构建HTTP服务Hyperf框架快速入门指南从零开始构建HTTP服务 前言 Hyperf是一个基于Swoole扩展的高性能PHP协程框架专为构建微服务和中间件而设计。本文将后端微服务Hyperf框架快速入门指南Hyperf框架快速入门指南 1. 项目目录结构及介绍 Hyperf是一个基于高性能协程服务器Swoole和Swow构建的PHP命令行CLI框架它强调了灵后端微服务上一篇5步掌握LosslessCut从无损剪辑到专业工作流的完整指南下一篇Equalizer APO终极指南免费打造专业级Windows音频系统创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

PaddleX 3.0.0 RC 接口升级全解析:模型与产线配置、推理 API 及产线功能变更指南

PaddleX 3.0.0 RC 接口升级全解析:模型与产线配置、推理 API 及产线功能变更指南

人工智能大模型低代码计算机视觉深度学习NLP模型推理服务RAG 【免费下载链接】PaddleX All-in-One Development Tool based on PaddlePaddle 项目地址: https://gitcode.com/paddlepaddle/PaddleX 点击查看 免费下载 导读 PaddleX 3.0.0 RC 对模型(Mod…

2026/10/14 18:19:58 阅读更多 →
uniTerm v1.9.5:AI原生终端工作台深度解析

uniTerm v1.9.5:AI原生终端工作台深度解析

1. uniTerm 是什么:一个被低估的 AI 原生终端工作台uniTerm v1.9.5 这个版本号乍看平平无奇,但如果你最近在 Linux 桌面、WSL 或 macOS 上频繁切换 Terminal.app、iTerm2、Tabby、VS Code 内置终端,甚至还在为 SSH 连接卡顿、多项目并行调试时…

2026/10/14 7:25:44 阅读更多 →
Ubuntu 误删 docx 恢复指南:从 rm 底层原理到工具实战

Ubuntu 误删 docx 恢复指南:从 rm 底层原理到工具实战

简介:面向Ubuntu系统用户的误删恢复讲解文档,重点解决使用删除命令时因缺少确认机制而造成的文件丢失问题。内容以两款恢复工具为主线:一款名为ext3grep,适用于ext3文件系统;另一款为extundelete,针对新版U…

2026/10/12 13:54:43 阅读更多 →

最新新闻

快速阅读不靠眼快:筛选与理解的实用框架

快速阅读不靠眼快:筛选与理解的实用框架

经常有人问我:“你读书怎么那么快?是不是一目十行、走马观花?”说实话,我刚开始试水快速阅读的时候也踩过不少坑,最典型的表现是字都看完了,合上书一问三不知。后来我花了很长时间去拆解“快速阅读”和“快…

2026/10/14 18:20:44 阅读更多 →
存量市场服务升级:低风险高回报的商业模式

存量市场服务升级:低风险高回报的商业模式

1. 为什么说"稳妥生意"比创业更值得关注最近三年,我身边有37位朋友尝试创业,最终存活下来的只有3家。这个残酷的数字让我开始思考:对于大多数普通人来说,是否存在着比创业风险更低、回报更稳定的商业机会?经…

2026/10/14 18:20:44 阅读更多 →
Decepticon 实战手册:EtherNet/IP + CIP 协议攻击全流程(44818/2222 端口下的 PLC 侦察、标签读写与模式切换)

Decepticon 实战手册:EtherNet/IP + CIP 协议攻击全流程(44818/2222 端口下的 PLC 侦察、标签读写与模式切换)

【免费下载链接】Decepticon Autonomous Hacking Agent for Red Team 项目地址: https://gitcode.com/gh_mirrors/de/Decepticon 点击查看 免费下载 本指南基于 Decepticon 仓库中 enip-cip 技能文档 编写,系统讲解针对北美工业控制系统(ICS…

2026/10/14 18:20:44 阅读更多 →
中点画圆算法详解:光栅化生成完美圆的数学原理与代码实现

中点画圆算法详解:光栅化生成完美圆的数学原理与代码实现

圆的生成算法,是计算机图形学课程里最容易被低估的一个实验。很多同学看到“画圆”两个字,第一反应是直接调用窗口库里的画圆函数,几行代码就结束。但实验真正要你做的,是把它当成一道光栅化算法题:输入圆心坐标、半径…

2026/10/14 18:20:44 阅读更多 →
把“学术导航仪”装进书匠策AI:一篇期刊论文的“造路”逻辑

把“学术导航仪”装进书匠策AI:一篇期刊论文的“造路”逻辑

官网直达:www.shujiangce.com 微信公众号搜一搜:书匠策AI 写期刊论文最折磨人的,从来不是“写”这个动作本身。 是你盯着空白文档,知道要做文献综述,却不知道从哪篇开始;知道要有理论框架,却拿…

2026/10/14 18:20:44 阅读更多 →
插件加载失败排查:从生命周期到激活机制,一篇搞定

插件加载失败排查:从生命周期到激活机制,一篇搞定

先说一句,我带过好几个插件化改造的项目,也修过无数跟插件相关的启动报错,所以看到 "failed to load plugins web boot: 2 entries did not activate" 这种日志时,第一反应不是翻框架文档,而是看插件的激活方…

2026/10/14 18:19:43 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →