PAGI 0.002002:明确应用加载方式

💡 原文英文,约1700词,阅读约需7分钟。
📝

内容提要

PAGI 0.002002规范发布,明确应用运行器可接受原生代码引用或含to_app方法的对象,统一Perl应用配置与运行时边界。to_app仅调用一次,提升性能并提前暴露错误。服务器集成规范放宽构造要求,强调事件交换。$send完成表示服务器已处理事件,非客户端接收。核心规范升至draft 0.4,协议独立演进。

🔎

延伸解读

to_app 与 Perl 惯例

PAGI 0.002002 明确应用运行器可接受原生代码引用或含 to_app 方法的对象,这借鉴了 PSGI/Plack 的惯例:配置阶段使用对象,运行时阶段使用代码引用。与 Python 的 __call__ 不同,Perl 不将对象视为代码引用,因此该规范避免了过度使用重载魔法,保持了网关边界的清晰。

一次调用的意义

运行器对 to_app 只调用一次,并在加载时验证返回的代码引用。这不仅提升性能,更重要的是将路由编译、中间件构建等初始化步骤集中在可预测的边界,使配置错误在服务器接受流量前暴露,而非在请求处理中才失败。

$send 的完成语义

规范澄清 $send 的 Future 完成表示服务器已验证并消费事件,而非客户端已接收。服务器可能保持 Future 未完成以施加背压,因此应用应始终 await $send 以实现自调节,而不阻塞 Perl 线程。

Q&A

PAGI 0.002002 规范对应用加载方式做了哪些明确?

PAGI 0.002002 明确通用应用运行器可以接受原生 PAGI 代码引用或已实例化的、提供 to_app 方法的对象。运行器对每个加载的实例只调用一次 to_app,并验证其返回代码引用,然后仅使用该代码引用进行连接分发。

PAGI 应用运行器如何规范化应用?

运行器接受原生 PAGI 代码引用或已实例化的对象(该对象提供 to_app 方法)。对于对象,运行器调用 to_app 一次,验证返回的是代码引用,然后使用该代码引用进行分发。

为什么 PAGI 0.002002 规定 to_app 只调用一次?

因为 to_app 只调用一次可以确保路由编译、中间件构建和应用设置发生在可预测的边界,提升性能,并让损坏的提供者在应用加载时即失败,而不是在服务器开始接受流量后。

PAGI 0.002002 中,哪些对象不被视为应用提供者?

包名字符串(如 'MyApp')和类方法调用(如 MyApp->to_app)不被视为应用提供者。提供者必须是已实例化的对象。

PAGI 0.002002 对服务器集成规范做了哪些调整?

服务器集成规范不再要求每个符合规范的服务器类实现特定的 new(app => ...) 构造函数和 run 方法。服务器可以是类、函数、嵌入式服务或外部进程,符合性在于如何调用规范化应用和交换 PAGI 事件,而非配置 API 的形状。

在 PAGI 中,$send 的 Future 成功解析意味着什么?

$send 的 Future 成功解析意味着服务器已验证并消费了事件,完成了与该事件相关的应用拥有的资源,并接受了输出进入其出站处理路径。它不意味着客户端已收到字节。

PAGI 0.002002 的版本号是多少?核心规范版本是多少?

PAGI 0.002002 的发行版本是 0.002002,核心规范推进到 draft 0.4,服务器集成规范为 draft 0.2,WWW 和 Lifespan 保持在 draft 0.3。

🏷️

标签

➡️

继续阅读