Qbix Server:纯 PHP 打造最快 Web 服务器
I built the fastest PHP webserver in the world

我构建了一个名为 Qbix Server 的纯 PHP Web 服务器,无需任何扩展、适配器或 Docker,仅用一个文件即可运行。它通过 pcntl_fork() 和写时复制(COW)技术,让每个 Worker 仅占用 120KB 内存,从而在 200MB 内存下启动数百个进程。这意味着即使面对 WordPress、Laravel 等使用阻塞 I/O 的未修改代码,Qbix 也能实现比 php-fpm 高 14 到 24 倍的吞吐量。它还能原生支持 WebSocket、自动生成功能完善的 API 文档,并内置 SQLite 集群复制功能,彻底取代了 nginx、Redis、Node.js 等复杂架构,让一台 $30 的机器即可支撑数万名并发用户。
阻塞式 I/O 在有足够多的 Worker 时根本不成问题,而写时复制技术让拥有‘足够多 Worker’的成本从 16GB 降到了 47MB。
HN 评论区
75- confusedbucket
除了无法与单纯的 FPM/Apache 模块相提并论的 prefork 模式外,这个项目还存在一系列隔离问题,但我在任何地方都没看到有人提及;比如函数中的静态变量(在 PHP 中常被视为请求生命周期的缓存)、没有默认值的类型化静态变量、define()、$_ENV、setlocale()、ignore_user_abort() 或 mb_internal_encoding(),仅举几例。此外,它还假设所有的函数/类声明都经过了保护,因此它并不是一个“开箱即用”的 Web 服务器替代品;对于大多数代码来说,它可能根本无法工作,所以“无需修改的 PHP”这一说法似乎有些牵强。
编辑:读完那份相当长的 README 后,发现里面确实提到了这一点。所以你要么使用提供的服务器 API 来获得速度,要么使用 CGI 模式——即便是对于 WP、Laravel 或 Symfony(真的算“遗留”吗?)。将其宣传为一个框架会更合适,因为只有通过它才能真正实现承诺的性能。
我对 Web 服务器代码本身也有些困惑;它是 PHP 5 的代码(甚至包含 @class 和 @private 注解),目标版本却是 8.1(已停止维护),在 PHP 8.2 上会产生弃用警告。
所采用的方法很有趣,但我不会把它用在任何重要的东西上。
如果你因为不得不运行 Web 服务器而感到如此不适,却又对这种“氛围驱动”(vibecoded)的 Web 服务器感到舒适,不妨考虑切换到 Go、.NET 或其他任何不需要与 PHP 固有的无共享模型搏斗的技术栈。
- pshirshov
> 1060 req/s
不错!我记得 2010 年时,单核 Pentium 4 还能轻松跑 18k RPS 的 Glassfish。又过了十年,进步居然只追上了那个水平!
- christophilus
有点跑题,但我最近用 Odin 写了一个 HTTP 服务器来学习这门语言。这是一门很愉快的语言,如果管理得当,内存占用极低。在我的旧笔记本上能达到每秒 5 万次请求。令人惊讶的是,Bun 也能匹配这个性能(尽管内存占用是 50MB,而 Odin 只有 3MB)。
做这类事情很有趣,但现实是,对于大多数应用来说,几乎任何技术栈都绰绰有余。
- nzeid
> php-fpm re-bootstraps the framework on every request (10–50ms)
是什么样的设置或基准测试让你看到了这个结果?
- dreadnip
人们从 90 年代起就用 pcntl_fork 来加速 PHP 代码了。这在纸面上看起来不错,能做出“令人印象深刻”的演示,但在真实世界的项目和使用场景中很快就会崩盘。这不过是 LLM 生成的垃圾/精神错乱罢了。