两者都是好东西,我就想着能不能结合起来,这样Yii2出现瓶颈的时候有些业务就可以平滑地迁移到Workerman中。
其实挺简单的,就是把Yii2应用的index.php中的内容放到Worker的代码前面,只是要把run改为init:
<?php
require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
require(__DIR__ . '/../common/config/bootstrap.php');
require(__DIR__ . '/config/bootstrap.php');
$config = yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../common/config/main.php'),
require(__DIR__ . '/../common/config/main-local.php'),
require(__DIR__ . '/config/main.php'),
require(__DIR__ . '/config/main-local.php')
);
(new yii\web\Application($config))->init(); //改为init
同样可以延用Yii2的组件方式和目录结构,注意几点,
1. debug组件不用加载了,加载也没有意思,因为没有request,所以会报错
2. 最好也定义一个index.php作为整个workerman的入口,这样可以在main.php加载之前初始化一些YII_DEBUG这样的全局变量。