← 返回主题列表
✨步子哥
@steper · 2026年03月13日 16:03 · 0浏览

FrankenPHP 扩展开发指南

FrankenPHP 扩展开发指南

bolt 高性能原生扩展

FrankenPHP
扩展开发指南

使用 Go 语言编写 PHP 扩展,释放协程并发潜力

rocket_launch

核心优势

  • check_circle 无需 C 代码:纯 Go 开发,避开复杂的 C/CGO
  • check_circle 高性能并发:直接利用 Goroutines 协程模型
  • check_circle 生态复用:无缝使用现有 Go 库生态

schema

类型系统

提供公共类型 API,自动处理 PHP 与 Go 间的类型转换。

  • data_object支持 Int, Float, Bool
  • text_fieldsString: frankenphp.GoString
  • view_listArray: frankenphp.Array

code

定义 PHP 函数

// 使用指令注释定义 PHP 函数签名 //export_php:function repeat_this(string $str, int $n): string func repeat_this(s *C.zend_string, n int64) unsafe.Pointer { // Go 转换辅助函数 str := frankenphp.GoString(unsafe.Pointer(s)) result := strings.Repeat(str, int(n)) // 返回 PHP 兼容类型 return frankenphp.PHPString(result, false) }

timeline

开发流程

1
创建模块
go mod init ...
2
编写扩展
定义函数与类
3
生成存根
extension-init
4
编译集成
嵌入 FrankenPHP

extension

高级特性

不透明类

使用 //export_php:class 封装 Go 结构体

类方法

通过方法暴露行为,保障内部状态安全

常量导出

支持全局常量与类常量的跨语言共享

GoLang PHP 8.2+ Worker Mode
auto_awesome frankenphp.dev

👍 1
💬 讨论回复 (1)
✨步子哥 #1 2026-03-13 16:08

FrankenPHP Worker 模式指南

speed 高性能常驻内存模式

FrankenPHP
Worker 模式指南

启动一次,常驻内存 · 毫秒级响应请求

lightbulb

核心概念

memory
内存常驻
应用启动后保存在内存中,避免重复加载开销
bolt
极速响应
请求处理时间缩短至毫秒级
terminal docker run -e FRANKENPHP_CONFIG="worker /app/script.php" dunglas/frankenphp

code

Worker 脚本结构

// 1. 引导应用 (仅执行一次) $app = require 'bootstrap.php';

// 2. 定义请求处理器 $handler = function() use ($app) { // 超全局变量会被自动重置 echo $app->handle($_GET, $_POST); };

// 3. 请求处理循环 while (frankenphp_handle_request($handler)) { // 可选: 请求后处理与垃圾回收 gc_collect_cycles(); }

注意:传统 PHP 库可能存在内存泄漏。建议配置 MAX_REQUESTS 环境变量定期重启 Worker 进程。

tune

配置选项

  • chevron_right Worker 数量
    默认: CPU核心数 × 2
  • chevron_right 热重载
    --watch 监控文件变更
  • chevron_right 优雅重启
    Admin API 触发

autorenew

生命周期管理

1
启动引导
2
监听请求
3
处理/重载

Worker 崩溃时采用指数退避策略自动重启,防止频繁崩溃导致系统过载。

PHP 8.2+ Go Runtime Caddy
menu_book frankenphp.dev/docs/worker

👍 1
推荐

🌟 智谱 GLM-5 已上线

我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。

🎁 领取 2000万 Tokens