天天看點

将Yii2和Workerman結合

兩者都是好東西,我就想着能不能結合起來,這樣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這樣的全局變量。