项目地址:
https://github.com/dvaknheo/workermanhttpd
WorkermanHttpd 是什么
WorkermanHttpd 致力于 Workerman 代码和 fpm 平台 代码几乎不用修改就可以双平台运行。 是对 Workerman 类的一个封装。
直接用 echo 输出。直接用超全局变量 $_GET,$_POST 等 只有少量系统函数改为 WorkermanHttpd 封装,按字母排序有:
- exit
- header
- setcookie
- session_start
- session_id
- session_destro
- session_set_save_handler
- set_exception_handler (TODO)
- register_shutdown_function (TODO)
比如原先代码里有 exit(); 要修改成 WorkermanHttpd::exit(); 调用参数都一样 比如原先代码里有 session_start(); 要修改成 WorkermanHttpd::session_start(); 调用参数都一样 具体可以调用 WorkermanHttpd::system_wrapper_get_providers()看有什么
基本应用
composer require dvaknheo/workermanhttpd <?php require(__DIR__.'/vendor/autoload.php'); function hello() { \WorkermanHttpd\WorkermanHttpd::header('test',DATE(DATE_ATOM)); echo "<h1> hello ,have a good start.</h1><pre>\n"; var_dump($_GET,$_POST,$_SERVER); echo "</pre>"; return true; // 正常 true , 404 false; } $optiOns=[ 'port'=>8080, 'http_handler'=>'hello', //* 更多的默认选项 /*// //'host' =>'127.0.0.1', //绑定 IP //'port' =>'8787', //绑定端口 'worker_name' => 'WorkermanHttpd', //标题 'worker_count' => -1, //CPU 'worker_properties' => [], //给 Worker 类传递的属性 'request_class' => '', //默认的请求类,一般不动。 'command' => 'start', //对应命令 , stop 等 'background' => false, //后台模式 'gracefull' => false, //优雅模式 //// 这段是几个服务器通用的 //'http_handler' => null, //执行的 http_handler 'http_handler_basepath' => '', //下版本再说, 资源目录 'http_handler_root' => null, //下版本再说, 'http_handler_file' => null, //下版本再说, 'http_exception_handler' => null, //下版本再说,对应 set_exception_handler 'http_404_handler' => null, //下版本再说,404 处理 'with_http_handler_root' => false, //下版本再说,是否主目录 index.php 'with_http_handler_file' => false, //下版本再说,是否开启资源文件读取 //*/ ]; \WorkermanHttpd\WorkermanHttpd::RunQuickly($options); 浏览器打开 http://127.0.0.1:8080/ ,即可看到效果 ,header 多了一行, 几个超全局变量也能正常使用。
类解读
除了主类和 SingletonExTrait 其他类都是无状态的
ExitException
中断的异常类。一般不直接用,你需要 WorkermanHttpd::Exit();
HttpServerForDuckPhp
封装了 DuckPhp\Http\Server 的类 用于 DuckPhp 工程
Request
可变单例请求类, 扩充自 Workerman\Protocols\Http\Request 使用 SingletonExTrait
可用 Request::G(MyRequest::G()) 替换
Response
可变单例请求类, 扩充自 Workerman\Protocols\Http\Response 使用 SingletonExTrait
可用 Request::G(MyRequest::G()) 替换
SingletonExTrait
可变单例类。 和 DuckPhp 的一样效果
WorkermanHttpd
主类。主要调用这个。 使用 SingletonExTrait
静态方法
RunQuickly($options)
快速运行
WorkermanHttpd::Request() 获得当前 Request 对象。 Response 获得当前 Response 对象。 OnWorkerStart($worker) 事件处理 OnMessage($connection, $request) 消息处理。
G($object = null)
可用 WorkermanHttpd::G(MyWorkermanHttpd::G()) 修改你的实现
备忘
php duckphp.php run --override-class=WorkermanHttpd/HttpServerForDuckphp --command start
其他碎碎念:
DuckPhp 框架的 workerman 平台(开发中)就是用这个封装,不需要改任何代码就从 fpm 平台跑到 workerman 平台加速了。
QQ 群: 714610448
过几天同步到 gitee 平台去。 这段时间的效率很低下,发出来看看能否提高一点效率 workermanhttpd 做了,以前的 swoolehttpd 也要改进适配新版 duckphp 。 性能测试是个 todo 。 然后大活就是后台框架了。 duckphp “把其他工程当成当前工程 composer lib 的” 的模式正在打磨。 到时候做新后台只要 composerrequire 就行了, 而不是现在各种 php 框架从 composer project 开始 而且所有插件真的是都可以不强改第三方代码的情况下各种对第三方代码魔改。
