我目前正在开发一个具有非常特殊功能的MVC WebFramework。
在XML文件中定义的布局被分为可单独排列/缓存/加载的内容块。
每个内容块(例如在多个页面上重复使用的页脚)都有自己的控制器。我管它叫块控制器。
此控制器执行相关代码(包括通过资源模型的DB请求、通过httpclient模型的外部API请求等)。
该框架设计用于涉及多个数据源的非常复杂的环境中。这通常是几个数据库服务器和RESTAPI。
现在的目标是同时执行这些内容块,以加速页面交付。
例子:
一个网络接口需要从谷歌邮件、Facebook、Twitter和其他10个来源获取你的地址簿,做一些匹配和计算。
每个请求大约需要1秒钟。
如果按顺序完成,这将累计15秒。
目标是为所有内容定义一个块(是的,这应该是一个模型,但我希望将其保持在块级别,因为大多数逻辑都是在这个XML文件中定义的。然后它们就不生成输出。)并将“并发执行”标志设置为1。
最后一个内容块,它按照所需的属性组装所有这些并发块,因此当它们全部完成并且数据可用时,它开始执行。像这样:
<block template="blank.phtml" block="twitter.php" concurrent="1" name="twitter"/>
<block template="blank.phtml" block="gmail.php" concurrent="1" name="gmail"/>
<block template="blank.phtml" block="facebook.php" concurrent="1" name="facebook"/>
<block template="stats.phtml" block="statistics.php">
<depends>twitter</depends>
<depends>gmail</depends>
<depends>facebook</depends>
</block>
解析器首先查看布局XML字段,扫描标记为并发执行的块,并用队列组装数组,每个队列点都可以有多个条目。它们按依赖顺序排列。
因此,如果某个对象没有依赖关系,那么它会在第一个位置直接进入队列组。所有依赖于这个组的东西都进入第二正电子,等等…
数据存储在单例模型中。
我现在的问题是,它可以与mod_cgi或mod_fastcgi for php一起工作,但它只是把Apaches mod_php搞得一团糟。
我在谷歌上搜索了一下,发现你不应该在mod php中使用pcntl_fork…
还有其他选择吗?