1 Star 0 Fork 0

Tantingchao/webman

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
start.php 4.27 KB
一键复制 编辑 原始数据 按行查看 历史
TTC1002335644 提交于 2020-10-13 15:49 . 命名空间规范化
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
use Workerman\Protocols\Http;
use Workerman\Connection\TcpConnection;
use Webman\App;
use support\Config;
use Webman\Route;
use Webman\Middleware;
use Dotenv\Dotenv;
use support\Request;
use support\bootstrap\Log;
use support\bootstrap\Container;
$configData = [
'path' => [
'' => config_path(),
],
'exclude_files' => [
'' => ['route' , 'container']
]
];
Dotenv::createMutable(base_path())->load();
Config::init($configData['path'] , $configData['exclude_files'] ?? []);
$config = config('server');
if ($timezone = config('app.default_timezone')) {
date_default_timezone_set($timezone);
}
Worker::$onMasterReload = function (){
if (function_exists('opcache_get_status')) {
if ($status = opcache_get_status()) {
foreach (array_keys($status['scripts']) as $file) {
opcache_invalidate($file, true);
}
}
}
};
Worker::$pidFile = $config['pid_file'];
Worker::$stdoutFile = $config['stdout_file'];
TcpConnection::$defaultMaxPackageSize = $config['max_package_size'] ?? 10*1024*1024;
$worker = new Worker($config['listen'], $config['context']);
$property_map = [ 'name', 'count', 'user', 'group', 'reusePort', 'transport', ];
foreach ($property_map as $property) {
if (isset($config[$property])) {
$worker->$property = $config[$property];
}
}
$worker->onWorkerStart = function ($worker) use($configData) {
Dotenv::createMutable(base_path())->load();
Config::reInit($configData['path'] , $configData['exclude_files'] ?? []);
foreach (config('bootstrap', []) as $class_name) {
/** @var \Webman\Bootstrap $class_name */
$class_name::start($worker);
}
//运行以下的debug
$debug = Config::get('app.debug' , true);
if($debug === true){
\support\debug\SqlListen::handle();
}
$app = new App($worker, Container::instance(), Log::channel('default'), app_path(), public_path());
Route::load(config_path() . '/route.php');
Middleware::load(config('middleware', []));
Middleware::load(['__static__' => config('static.middleware', [])]);
Http::requestClass(Request::class);
$worker->onMessage = [$app, 'onMessage'];
};
foreach (config('process', []) as $process_name => $config) {
$worker = new Worker($config['listen'] ?? null, $config['context'] ?? []);
$property_map = [
'count',
'user',
'group',
'reloadable',
'reusePort',
'transport',
'protocol',
];
$worker->name = $process_name;
foreach ($property_map as $property) {
if (isset($config[$property])) {
$worker->$property = $config[$property];
}
}
$worker->onWorkerStart = function ($worker) use ($config , $configData) {
Dotenv::createMutable(base_path())->load();
Config::reInit($configData['path'] , $configData['exclude_files'] ?? []);
$bootstrap = $config['bootstrap'] ?? config('bootstrap', []);
if (!in_array(support\bootstrap\Log::class, $bootstrap)) {
$bootstrap[] = support\bootstrap\Log::class;
}
foreach ($bootstrap as $class_name) {
/** @var \Webman\Bootstrap $class_name */
$class_name::start($worker);
}
foreach ($config['services'] ?? [] as $server) {
if (!class_exists($server['handler'])) {
echo "process error: class {$config['handler']} not exists\r\n";
continue;
}
$listen = new Worker($server['listen'] ?? null, $server['context'] ?? []);
if (isset($server['listen'])) {
echo "listen: {$server['listen']}\n";
}
$class = Container::make($server['handler'], $server['constructor'] ?? []);
worker_bind($listen, $class);
$listen->listen();
}
if (isset($config['handler'])) {
if (!class_exists($config['handler'])) {
echo "process error: class {$config['handler']} not exists\r\n";
return;
}
$class = Container::make($config['handler'], $config['constructor'] ?? []);
worker_bind($worker, $class);
}
};
}
Worker::runAll();
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/tantingchao/webman.git
git@gitee.com:tantingchao/webman.git
tantingchao
webman
webman
master

搜索帮助