yuql / webworker
web http server
v1.3.4
2019-11-18 08:34 UTC
Requires
- php: >=7.0
- workerman/workerman: ^3.3
README
基于Workerman实现的自带http server的web开发框架,用于开发高性能的api应用,例如app接口服务端等。
特性
- 仅只支持php7
- 天生继承workerman所拥有的特性
- 只实现了简单路由功能的小巧框架,便于开发者使用和扩展.demo1中只是目录示例,开发者可自行定义自己的应用目录结构
- 相比php-fpm或mod_php的方式性能有几十倍左右的提升
- 自带简单的单例redis操作类和单例mysqli操作类(支持自动重连)
- 可设置自动加载目录加载目录下的所有php文件(仅一级不支持递归)
- 自定义404响应
- 支持http协议1.1和1.0的长连接和短连接
- 集成了workerman-statistics项目,可以监控服务情况
- 支持中间件
安装
composer require yuqinglan/webworker
或者
"require": {
"php": ">=7.0",
"workerman/workerman" : "^3.3",
"yuql/webworker" : "^1.2.1"
}
快速开始
config.php
<?php
// 测试环境配置参数
return $config = [
'app' => 'application',
'name' => 'example',
'count' => '4',
'envDev' => true,
'debug' => true,
'components' => [
'Mmysqli' => [
'host'=>'127.0.0.1',
'user'=>'root',
'password'=>'123456',
'db'=>'chehang168',
'port'=>'3306',
'charset'=>'utf8',
],
'db' => [
'dns'=>'mysql:dbname=chehang168;port=3306;host=127.0.0.1;charset=utf8',
'user'=>'root',
'password'=>'123456',
'options'=>[
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
\PDO::ATTR_EMULATE_PREPARES => false,
]
],
'redis' => [
'host' => '127.0.0.1',
'port' => 6379,
'password' => '',
'db' => 1
],
'logs' => [
'name' => 'logs'
]
],
'version' => [
'v1.0' => 'ver1',
]
];
start.php
<?php
ini_set('display_errors', 'on');
use Workerman\Worker;
require_once 'vendor/autoload.php';
// 标记是全局启动
define('GLOBAL_START', 1);
define('ROOT', __DIR__);
// 加载所有Applications/*/start.php,以便启动所有服务
foreach(glob(__DIR__.'/Application/*/start*.php') as $start_file)
{
require_once $start_file;
}
// 运行所有服务
Worker::runAll();
demo.php
<?php
use Workerman\Worker;
use WebWorker\App;
use WebWorker\Libs\Mdb;
use WebWorker\Libs\Mredis;
use WebWorker\Libs\Mmysqli;
require_once __DIR__ . '/../../vendor/autoload.php';
// 加载配置文件
define("WEBWORKER_RUN", getenv("WEBWORKER_RUN"));
$config = require_once __DIR__ . '/config/config.php';
$app = new App('http://127.0.0.1:3072', [], $config);
$app->autoload = [
__DIR__."/libs/",
__DIR__."/funcs/",
];
//设置监控
$app->statistic_server = "udp://127.0.0.1:55656";
// 初始化 db & redis
$app->onAppStart = function(App $app) {
$app->Mmysqli = Mdb::getInstance('WebWorker\Libs\Mmysqli', $app->get('Mmysqli'));
$app->db = Mdb::getInstance('WebWorker\db\PdoMysql', $app->get('db'));
$app->redis = Mredis::getInstance($app->get('redis'));
// 支持接受reload信号,这包含的文件修改不需要重启
\WebWorker\autoload_dir($app->autoload);
};
// 中间件
$app->AddFunc('/', function() {
if ($_SERVER['REMOTE_ADDR'] != '127.0.0.1') {
$this->ServerJson(array("code" => 2, "msg" => "禁止访问"));
return true;
}
});
//自定义404
$app->on404 = function() {
$this->ServerJson(['code' => 2, 'msg' => '404 not found']);
};
// 路由
//$app->HandleFunc("/", function() {
// $data = array(
// "code" => 0,
// "msg" => "欢迎使用",
// "data" => []
// );
// return $data;
//});
$app->HandleFunc("/", ['index', 'index']);
//$app->HandleFunc("index/index");
// 如果不是在根目录启动,则运行runAll方法
if(!defined('GLOBAL_START'))
{
Worker::runAll();
}