将插件添加到vender文件夹里
swoole服务启动代码
composer安装
composer require tsingsun/yii2-swoole
<?php
use \tsingsun\swoole\server\Server;
use \tsingsun\swoole\server\Timer;
use \common\models\common\SwooleTaskLog;
/**
* Created by PhpStorm.
* User: tsingsun
* Date: 2017/2/28
* Time: 上午11:15
*/
defined('WEBROOT') or define('WEBROOT', __DIR__ . '/web');
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');
defined('COROUTINE_ENV') or define('COROUTINE_ENV', true);
require(__DIR__ . '/../vendor/autoload.php');
require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
require __DIR__ . '/../common/config/bootstrap.php';
$config1 = \yii\helpers\ArrayHelper::merge(
require __DIR__ . '/../common/config/main.php',
require __DIR__ . '/../common/config/main-local.php',
require __DIR__ . '/../frontend/config/main.php',
require __DIR__ . '/../frontend/config/main-local.php'
);
$config = [
'class' => 'tsingsun\swoole\server\HttpServer',
// 'timeout'=>2,
'setting' => [
'daemonize' => 0,
'max_coro_num' => 3000,
'reactor_num' => 1,
'worker_num' => 2,
'task_worker_num' => 6,
'pid_file' => __DIR__ . '/runtime/testHttp.pid',
'log_file' => __DIR__ . '/runtime/logs/swoole.log',
'debug_mode' => 1,
'enable_coroutine' => COROUTINE_ENV
],
];
Server::run($config, function (Server $server) use($config1) {
(new \yii\web\Application($config1))->run();
$starter = new \tsingsun\swoole\bootstrap\WebApp($server);
//初始化函数独立,为了在启动时,不会加载Yii相关的文件,在库更新时采用reload平滑启动服务器
$starter->init = function (\tsingsun\swoole\bootstrap\BaseBootstrap $bootstrap) {
require(__DIR__ . '/vendor/tsingsun/yii2-swoole/src/Yii.php');
// $config = require(__DIR__ . '/config/web.php');
//if you has local config
$config = yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../common/config/main.php'),
require(__DIR__ . '/../common/config/main-local.php')
);
Yii::setAlias('@webroot', WEBROOT);
Yii::setAlias('@web', '/');
//如果需要原生的swoole Server,可以这样
Yii::$swooleServer = $bootstrap->getServer()->getSwoole();
$bootstrap->appConfig = $config;
};
$server->getSwoole()->on('WorkerStart',function(swoole_server $serv,$worker_id){
if($worker_id === 0){
Timer::tick(1000,function($timer_id) use ($serv) {
echo '---start swoole time:'.date('Y-m-d H:i:s',time());
$data = [1,3,2,4];
$serv->Task($data);
echo '---end swoole time:'.date('Y-m-d H:i:s',time()).PHP_EOL;
});
}
});
//如果需要swoole Server
$server->getSwoole()->on("Task", function (swoole_server $serv, $task_id, $from_id, $data) {
// echo "#{$serv->worker_id}\tonTask: [PID={$serv->worker_pid}]: task_id=$task_id, data_len=" . json_decode($data) . "." . PHP_EOL;
$result = '';
$data = json_decode($data,true);
echo '---start task event '.$data.PHP_EOL;
// dump($data);
$serv->finish($result);
}
);
$server->getSwoole()->on("Finish", function (swoole_server $serv, $task_id, $data) {
echo "Task#$task_id finished, data_len=" . $data . PHP_EOL;
});
$server->bootstrap = $starter;
$server->start();
});