电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

詳解PHP框架EasySwoole

瀏覽:2日期:2022-09-07 08:58:39
目錄安裝運行編輯根目錄下的composer.json 文件最后執(zhí)行composer dumpautoload生命周期配置文件說明配置操作類添加用戶配置項生產(chǎn)與開發(fā)配置分離動態(tài)配置服務管理腳本文件熱加載安裝

使用 Composer 安裝

composer require easyswoole/easyswoole=3.xphp vendor/bin/easyswoole install

啟動框架

php easyswoole start

nginx轉(zhuǎn)發(fā)

server { root /data/wwwroot/; server_name local.easyswoole.com; location / { proxy_http_version 1.1; proxy_set_header Connection 'keep-alive'; proxy_set_header X-Real-IP $remote_addr; if (!-e $request_filename) { proxy_pass http://127.0.0.1:9501; } if (!-f $request_filename) { proxy_pass http://127.0.0.1:9501; } }}

proxy_set_header X-Real-IP $remote_addr; 獲取真實IP地址

運行

project              項目部署目錄

----------------------------------

├─App        應用目錄

│  └─HttpController      應用的控制器目錄

│     └─Index.php    默認控制器文件

----------------------------------

Index.php

<?phpnamespace AppHttpController;use EasySwooleHttpAbstractInterfaceController;class Index extends Controller{ function index() { // TODO: Implement index() method. $this->response()->write(’hello world’); }}編輯根目錄下的composer.json 文件

注冊應用的命名空間

{ 'autoload': { 'psr-4': { 'App': 'App/' } }, 'require': { 'easyswoole/easyswoole': '3.x-dev' }}

意思就是設置自動加載

最后執(zhí)行composer dumpautoload

命令更新命名空間,可以開始編寫業(yè)務邏輯

# 更新命名空間映射

composer dumpautoload

# 啟動框架

php easyswoole start

目錄結構

project                   項目部署目錄

├─App                     應用目錄(可以有多個)

│  ├─HttpController       控制器目錄

│  │  └─Index.php         默認控制器

│  └─Model                模型文件目錄

├─Log                     日志文件目錄

├─Temp                    臨時文件目錄

├─vendor                  第三方類庫目錄

├─composer.json           Composer架構

├─composer.lock           Composer鎖定

├─EasySwooleEvent.php     框架全局事件

├─easyswoole              框架管理腳本

├─easyswoole.install      框架安裝鎖定文件

├─dev.php                 開發(fā)配置文件

├─produce.php             生產(chǎn)配置文件

生命周期

詳解PHP框架EasySwoole

配置文件說明

<?php /** * Created by PhpStorm. * User: yf * Date: 2019-01-01 * Time: 20:06 */ return [ ’SERVER_NAME’ => 'EasySwoole',//服務名 ’MAIN_SERVER’ => [ ’LISTEN_ADDRESS’ => ’0.0.0.0’,//監(jiān)聽地址 ’PORT’ => 9501,//監(jiān)聽端口 ’SERVER_TYPE’ => EASYSWOOLE_WEB_SERVER, //可選為 EASYSWOOLE_SERVER EASYSWOOLE_WEB_SERVER EASYSWOOLE_WEB_SOCKET_SERVER ’SOCK_TYPE’ => SWOOLE_TCP,//該配置項當為SERVER_TYPE值為TYPE_SERVER時有效 ’RUN_MODEL’ => SWOOLE_PROCESS,// 默認Server的運行模式 ’SETTING’ => [// Swoole Server的運行配置( 完整配置可見[Swoole文檔](https://wiki.swoole.com/wiki/page/274.html) ) ’worker_num’ => 8,//運行的 worker進程數(shù)量 ’max_request’ => 5000,// worker 完成該數(shù)量的請求后將退出,防止內(nèi)存溢出 ’task_worker_num’ => 8,//運行的 task_worker 進程數(shù)量 ’task_max_request’ => 1000,// task_worker 完成該數(shù)量的請求后將退出,防止內(nèi)存溢出 ’reload_async’ => true,//設置異步重啟開關。設置為true時,將啟用異步安全重啟特性,Worker進程會等待異步事件完成后再退出。 ’task_enable_coroutine’ => true//開啟后自動在onTask回調(diào)中創(chuàng)建協(xié)程 ] ], ’TEMP_DIR’ => null,//臨時文件存放的目錄 ’LOG_DIR’ => null,//日志文件存放的目錄 ’CONSOLE’ => [//console控制臺組件配置 ’ENABLE’ => true,//是否開啟 ’LISTEN_ADDRESS’ => ’127.0.0.1’,//監(jiān)聽地址 ’PORT’ => 9500,//監(jiān)聽端口 ’USER’ => ’root’,//驗權用戶名 ’PASSWORD’ => ’123456’//驗權用戶名 ], ’FAST_CACHE’ => [//fastCache組件 ’PROCESS_NUM’ => 0,//進程數(shù),大于0才開啟 ’BACKLOG’ => 256,//數(shù)據(jù)隊列緩沖區(qū)大小 ], ’DISPLAY_ERROR’ => true,//是否開啟錯誤顯示 ];配置操作類

EasySwooleConfig 類

toArray 方法獲取全部配置,load 方法重載全部配置

如果設置了修改,需要更新配置的意思

<?php$instance = EasySwooleEasySwooleConfig::getInstance();// 獲取配置 按層級用點號分隔$instance->getConf(’MAIN_SERVER.SETTING.task_worker_num’);// 設置配置 按層級用點號分隔$instance->setConf(’DATABASE.host’, ’localhost’);// 獲取全部配置$conf = $instance->getConf();// 用一個數(shù)組覆蓋當前配置項$conf[’DATABASE’] = [ ’host’ => ’127.0.0.1’, ’port’ => 13306];$instance->load($conf);添加用戶配置項

’MYSQL’ => [ ’host’ => ’192.168.75.1’, ’port’ => ’3306’, ’user’ => ’root’, ’timeout’ => ’5’, ’charset’ => ’utf8mb4’, ’password’ => ’root’, ’database’ => ’cry’, ’POOL_MAX_NUM’ => ’20’, ’POOL_TIME_OUT’ => ’0.1’,],/*################ REDIS CONFIG ##################*/’REDIS’ => [ ’host’ => ’127.0.0.1’, ’port’ => ’6379’, ’auth’ => ’’, ’POOL_MAX_NUM’ => ’20’, ’POOL_MIN_NUM’ => ’5’, ’POOL_TIME_OUT’ => ’0.1’,]生產(chǎn)與開發(fā)配置分離

默認為開發(fā)模式,加載 dev.php

生成

php easyswoole start produce

DI注入配置

也就是依賴注入

<?phpDi::getInstance()->set(SysConst::ERROR_HANDLER,function (){});//配置錯誤處理回調(diào)Di::getInstance()->set(SysConst::SHUTDOWN_FUNCTION,function (){});//配置腳本結束回調(diào)Di::getInstance()->set(SysConst::HTTP_CONTROLLER_NAMESPACE,’AppHttpController’);//配置控制器命名空間Di::getInstance()->set(SysConst::HTTP_CONTROLLER_MAX_DEPTH,5);//配置http控制器最大解析層級Di::getInstance()->set(SysConst::HTTP_EXCEPTION_HANDLER,function (){});//配置http控制器異常回調(diào)Di::getInstance()->set(SysConst::HTTP_CONTROLLER_POOL_MAX_NUM,15);//http控制器對象池最大數(shù)量動態(tài)配置

每次開始了,是上一次的進程,比如你打開了舊版,現(xiàn)在更新了新版,但是舊版還是開著,沒有重啟動,也就是一直舊版,現(xiàn)在有個動態(tài)配置,表示可以平滑的修改

<?php Config::getInstance()->setDynamicConf(’test_config_value’, 0);//配置一個動態(tài)配置項 $test_config_value_1 = Config::getInstance()->getDynamicConf(’test_config_value’);//獲取一個配置 Config::getInstance()->delDynamicConf(’test_config_value’);//刪除一個配置服務管理腳本

php easyswoole

 install       安裝easySwoole

 start         啟動easySwoole

 stop          停止easySwoole(守護模式下使用)

 reload        重啟easySwoole(守護模式下使用)

 help          查看命令的幫助信息

easyswoole help -start

守護模式啟動

php easyswoole start d

線上

php easyswoole start produce

停止

php easyswoole stop

重啟服務

php easyswoole reload 只重啟task進程

php easyswoole reload all  重啟task + worker進程

文件熱加載

由于 swoole 常駐內(nèi)存的特性,修改文件后需要重啟worker進程才能將被修改的文件重新載入內(nèi)存中

解決:Process的方式實現(xiàn)文件變動自動進行服務重載

新建文件 App/Process/HotReload.php 并添加如下內(nèi)容,也可以放在其他位置,請對應命名空間

<?phpnamespace AppProcess;use EasySwooleComponentProcessAbstractProcess;use EasySwooleEasySwooleServerManager;use EasySwooleUtilityFile;use SwooleProcess;use SwooleTable;use SwooleTimer;/** * 暴力熱重載 * Class HotReload * @package AppProcess */class HotReload extends AbstractProcess{ /** @var swoole_table $table */ protected $table; protected $isReady = false; protected $monitorDir; // 需要監(jiān)控的目錄 protected $monitorExt; // 需要監(jiān)控的后綴 /** * 啟動定時器進行循環(huán)掃描 */ public function run($arg) { // 此處指定需要監(jiān)視的目錄 建議只監(jiān)視App目錄下的文件變更 $this->monitorDir = !empty($arg[’monitorDir’]) ? $arg[’monitorDir’] : EASYSWOOLE_ROOT . ’/App’; // 指定需要監(jiān)控的擴展名 不屬于指定類型的的文件 無視變更 不重啟 $this->monitorExt = !empty($arg[’monitorExt’]) && is_array($arg[’monitorExt’]) ? $arg[’monitorExt’] : [’php’]; if (extension_loaded(’inotify’) && empty($arg[’disableInotify’])) { // 擴展可用 優(yōu)先使用擴展進行處理 $this->registerInotifyEvent(); echo 'server hot reload start : use inotifyn'; } else { // 擴展不可用時 進行暴力掃描 $this->table = new Table(512); $this->table->column(’mtime’, Table::TYPE_INT, 4); $this->table->create(); $this->runComparison(); Timer::tick(1000, function () { $this->runComparison(); }); echo 'server hot reload start : use timer tick comparisonn'; } } /** * 掃描文件變更 */ private function runComparison() { $startTime = microtime(true); $doReload = false; $dirIterator = new RecursiveDirectoryIterator($this->monitorDir); $iterator = new RecursiveIteratorIterator($dirIterator); $inodeList = array(); // 迭代目錄全部文件進行檢查 foreach ($iterator as $file) { /** @var SplFileInfo $file */ $ext = $file->getExtension(); if (!in_array($ext, $this->monitorExt)) { continue; // 只檢查指定類型 } else { // 由于修改文件名稱 并不需要重新載入 可以基于inode進行監(jiān)控 $inode = $file->getInode(); $mtime = $file->getMTime(); array_push($inodeList, $inode); if (!$this->table->exist($inode)) { // 新建文件或修改文件 變更了inode $this->table->set($inode, [’mtime’ => $mtime]); $doReload = true; } else { // 修改文件 但未發(fā)生inode變更 $oldTime = $this->table->get($inode)[’mtime’]; if ($oldTime != $mtime) { $this->table->set($inode, [’mtime’ => $mtime]); $doReload = true; } } } } foreach ($this->table as $inode => $value) { // 迭代table尋找需要刪除的inode if (!in_array(intval($inode), $inodeList)) { $this->table->del($inode); $doReload = true; } } if ($doReload) { $count = $this->table->count(); $time = date(’Y-m-d H:i:s’); $usage = round(microtime(true) - $startTime, 3); if (!$this->isReady == false) { // 監(jiān)測到需要進行熱重啟 echo 'severReload at {$time} use : {$usage} s total: {$count} filesn'; ServerManager::getInstance()->getSwooleServer()->reload(); } else { // 首次掃描不需要進行重啟操作 echo 'hot reload ready at {$time} use : {$usage} s total: {$count} filesn'; $this->isReady = true; } } } /** * 注冊Inotify監(jiān)聽事件 */ private function registerInotifyEvent() { // 因為進程獨立 且當前是自定義進程 全局變量只有該進程使用 // 在確定不會造成污染的情況下 也可以合理使用全局變量 global $lastReloadTime; global $inotifyResource; $lastReloadTime = 0; $files = File::scanDirectory(EASYSWOOLE_ROOT . ’/App’); $files = array_merge($files[’files’], $files[’dirs’]); $inotifyResource = inotify_init(); // 為當前所有的目錄和文件添加事件監(jiān)聽 foreach ($files as $item) { inotify_add_watch($inotifyResource, $item, IN_CREATE | IN_DELETE | IN_MODIFY); } // 加入事件循環(huán) swoole_event_add($inotifyResource, function () { global $lastReloadTime; global $inotifyResource; $events = inotify_read($inotifyResource); if ($lastReloadTime < time() && !empty($events)) { // 限制1s內(nèi)不能進行重復reload $lastReloadTime = time(); ServerManager::getInstance()->getSwooleServer()->reload(); } }); } public function onShutDown() { // TODO: Implement onShutDown() method. } public function onReceive(string $str) { // TODO: Implement onReceive() method. }}

添加好后在全局的 EasySwooleEvent.php 中,注冊該自定義進程

public static function mainServerCreate(EventRegister $register){ $swooleServer = ServerManager::getInstance()->getSwooleServer(); $swooleServer->addProcess((new HotReload(’HotReload’, [’disableInotify’ => false]))->getProcess());}

以上就是詳解PHP框架EasySwoole的詳細內(nèi)容,更多關于PHP框架EasySwoole的資料請關注好吧啦網(wǎng)其它相關文章!

標簽: PHP
相關文章:
主站蜘蛛池模板: 喷码机,激光喷码打码机,鸡蛋打码机,手持打码机,自动喷码机,一物一码防伪溯源-恒欣瑞达有限公司 | 今日热点_实时热点_奇闻异事_趣闻趣事_灵异事件 - 奇闻事件 | 杜康白酒加盟_杜康酒代理_杜康酒招商加盟官网_杜康酒厂加盟总代理—杜康酒神全国运营中心 | 悬浮拼装地板_篮球场木地板翻新_运动木地板价格-上海越禾运动地板厂家 | 衡阳耐适防护科技有限公司——威仕盾焊接防护用品官网/焊工手套/焊接防护服/皮革防护手套 | 云南成人高考网| 高扬程排污泵_隔膜泵_磁力泵_节能自吸离心水泵厂家-【上海博洋】 | NMRV减速机|铝合金减速机|蜗轮蜗杆减速机|NMRV减速机厂家-东莞市台机减速机有限公司 | 优考试_免费在线考试系统_培训考试系统_题库系统_组卷答题系统_匡优考试 | 东莞动力锂电池保护板_BMS智能软件保护板_锂电池主动均衡保护板-东莞市倡芯电子科技有限公司 | 岩棉切条机厂家_玻璃棉裁条机_水泥基保温板设备-廊坊鹏恒机械 | 截齿|煤截齿|采煤机截齿|掘进机截齿|旋挖截齿-山东卓力截齿厂家报价 | 高柔性拖链电缆_卷筒电缆_耐磨耐折聚氨酯电缆-玖泰特种电缆 | 棕刚玉_白刚玉_铝酸钙-锐石新材料| X光检测仪_食品金属异物检测机_X射线检测设备_微现检测 | 钢化玻璃膜|手机钢化膜|钢化膜厂家|手机保护膜-【东莞市大象电子科技有限公司】 | 单机除尘器 骨架-脉冲除尘器设备生产厂家-润天环保设备 | 济南品牌包装设计公司_济南VI标志设计公司_山东锐尚文化传播 | 精密模具加工制造 - 富东懿 | 电机修理_二手电机专家-河北豫通机电设备有限公司(原石家庄冀华高压电机维修中心) | 钢格板|镀锌钢格板|热镀锌钢格板|格栅板|钢格板|钢格栅板|热浸锌钢格板|平台钢格板|镀锌钢格栅板|热镀锌钢格栅板|平台钢格栅板|不锈钢钢格栅板 - 专业钢格板厂家 | 伶俐嫂培训学校_月嫂培训班在哪里报名学费是多少_月嫂免费政府培训中心推荐 | 沥青车辙成型机-车托式混凝土取芯机-混凝土塑料试模|鑫高仪器 | 冰晶石|碱性嫩黄闪蒸干燥机-有机垃圾烘干设备-草酸钙盘式干燥机-常州市宝康干燥 | 新疆散热器,新疆暖气片,新疆电锅炉,光耀暖通公司 | 400电话_400电话申请_888元包年_400电话办理服务中心_400VIP网 | 口信网(kousing.com) - 行业资讯_行业展会_行业培训_行业资料 | 冰晶石|碱性嫩黄闪蒸干燥机-有机垃圾烘干设备-草酸钙盘式干燥机-常州市宝康干燥 | 定硫仪,量热仪,工业分析仪,马弗炉,煤炭化验设备厂家,煤质化验仪器,焦炭化验设备鹤壁大德煤质工业分析仪,氟氯测定仪 | 单锥双螺旋混合机_双螺旋锥形混合机-无锡新洋设备科技有限公司 | 耳模扫描仪-定制耳机设计软件-DLP打印机-asiga打印机-fitshape「飞特西普」 | 食品无尘净化车间,食品罐装净化车间,净化车间配套风淋室-青岛旭恒洁净技术有限公司 | 沈阳网站建设_沈阳网站制作_沈阳网页设计-做网站就找示剑新零售 沈阳缠绕膜价格_沈阳拉伸膜厂家_沈阳缠绕膜厂家直销 | 不干胶标签-不干胶贴纸-不干胶标签定制-不干胶标签印刷厂-弗雷曼纸业(苏州)有限公司 | 【灵硕展览集团】展台展会设计_展览会展台搭建_展览展示设计一站式服务公司 | 济南侦探调查-济南调查取证-山东私家侦探-山东白豹调查咨询公司 密集架|电动密集架|移动密集架|黑龙江档案密集架-大量现货厂家销售 | 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 盘煤仪,盘料仪,盘点仪,堆料测量仪,便携式激光盘煤仪-中科航宇(北京)自动化工程技术有限公司 | 智能风向风速仪,风速告警仪,数字温湿仪,综合气象仪(气象五要素)-上海风云气象仪器有限公司 | 塑胶跑道_学校塑胶跑道_塑胶球场_运动场材料厂家_中国塑胶跑道十大生产厂家_混合型塑胶跑道_透气型塑胶跑道-广东绿晨体育设施有限公司 | 【德信自动化】点胶机_全自动点胶机_自动点胶机厂家_塑料热压机_自动螺丝机-深圳市德信自动化设备有限公司 |