You are here

让Drupal兼容持久性应用服务器( ReactPHP, PHP-PM,Swoole)

g089h515r806 的头像
Submitted by g089h515r806 on 星期二, 2025-09-09 02:45

我们知道,Drupal是一个PHP版本的CMS系统,这个系统开始涉及,就是面向HTTP 请求的,底层逻辑就是一个请求,启动一次引导指令,请求结束后,进程结束。这种模式比较简单。

随着技术的进步,其它语言,都可以实现程序启动后,处理多个请求,比如Java,Nodejs,这种模式的优点是性能卓越。PHP里面也有类似的框架,比如Swoole,这个国产的框架,底层C++;以及 ReactPHP, PHP-PM等等,都可以实现启动后,处理多个请求。

受限于Drupal历史代码的负担,让Drupal兼容持久性应用服务器并不是一件容易的事情,Drupal社区有部分人士,多次呼吁,讨论的也很激烈,这里有一个专门的讨论帖子:

https://www.drupal.org/project/drupal/issues/2218651

从目前来开,解决的措施有两个方面:

1, 引入 symfony/runtime ,让现有的运行时,从框架中解耦出来,这样就允许增加新的运行时了,比如ReactPHP,Swoole。 https://www.drupal.org/project/drupal/issues/3313404

2, 引入异步编程,目前已经在Drupal核心开始使用Fibers,实现并发;将来可能要引入Revolt event loop。

https://www.drupal.org/project/drupal/issues/3257726

https://www.drupal.org/project/drupal/issues/3394423

受限于技术本身的难度,这个问题的解决,进展缓慢。截止到2025年9月9日,我发现了一个重大进展,@kingdutch在他的博客上面,给出技术实现的路线图,https://www.alexandervarwijk.com/blog/2025-09-08-proposal-restructuring-drupals-internals

在这篇重构Drupal内核的博客中,@kingdutch分析了当前问题的难点,比如Drupal引导制定启动时,做了很多特定的工作,这些工作在其它环境中不是必须的。他分析symfony/runtime,已经与Drupal内核整合的路线图,给出了大致的技术路径,并提供了示范代码。

一旦Drupal的引导指令可以常驻内存,启动后可以处理很多个请求,性能就会有很大的提升,那么Drupal的应用场景将会极大的扩展,比如现代版本的聊天室,邮件发送服务器,更方便的AI集成。


论坛:

Drupal版本: