yuql/webworker

web http server

v1.3.4 2019-11-18 08:34 UTC

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();
}