一、Swoole框架介紹
swoole是一套設計非常精巧,有效提高開發效率的PHP框架,Swoole有統一的唯一全域物件,類似于Java的注冊樹,掛載了常用的一些物件,如資料庫、模板引擎、快取系統、日志系統、事件處理系統等,可以很方便地呼叫功能,快速開發,使用swoole框架,僅需配置一個config.php檔案,在其他PHP檔案中只需要require config.php檔案,即可呼叫框架的所有功能,
swoole通過組態檔可以實作在輕松更換模塊驅動方式,比如資料庫連接,可以很方便得在Pdo MySQL MySQLi之間更換,快取可以用filecache,也可以用dbcache,還可以用memcache,日志可以用資料庫日志,也可以用系統日志或檔案日志,
代碼:
<?php
require 'config.php';
//自動加載模塊
$php->autoload('db','tpl','cache','log','event','upload');
//資料庫查詢
$res = $php->db->query('select * from test');
$one = $res->fetch();
$all = $res->fetchall();
//日志
$php->log->info('hello');
//快取
$php->cache->get('cache_key');
$hello = $php->cache->set('cache_key','me',1800);
//模板
$php->tpl->assign('hello',$hello);
$php->tpl->display('index.html');
Swoole提供了很多類別庫工具,表單生成、輸入驗證和過濾,登錄驗證處理,JS生成,Ajax支持,除錯工具,客戶端操作,URL合并拆分工具等,
另外也提供,網路類(Block、Select、Event的TCP、UDP Server & Client),也提供一些簡單的服務器協議實作(HTTP,Chat,FTP,SMTP,POP3等),還有2個js類別庫,UI庫和表單驗證,
二、高級應用
Swoole框架也提供了MVC的apps結構,通過contoller的繼承,實作業務邏輯的封裝,model的繼承,實作資料操作的封裝,view層使用smarty模板引擎實作頁面顯示的邏輯封裝,
Swoole框架提供了強大的Model類,有get,gets,set,sets,del,dels,put可以非常方便的實作資料庫的增刪查改,gets介面還有自動分頁的功能,
swoole的SQL封裝很靈活,它的特色是,所有的SQL拼接都使用陣列的方式,而不是物件方法,這樣資料庫查詢引數可以和PHP的$ _GET,$ _POST,$_SESSION,Cache,Cookie無縫集成,
代碼:
<?php
$model = createModel('TestModel');
$gets['where'][] = 'id>1';
$gets['order'] = 'id desc';
$gets['limit'] = 10;
$gets['where'][] = 'category=10';
$gets['select'] = 'id,title,name'];
$gets['leftjoin'] ….
$data = $model->gets($gets);
Swoole中也有ORM的資料庫操作方式,可以參考開發手冊,
Swoole MVC URL路由方式,是通過用戶提供的函式完成的,用戶函式只需要回傳具體呼叫哪個Controller的哪個Method,配合使用url rewrite,可以定制出任意的URL方案,比如/controller/action/ , controller_action.do,controller/action.do等,或者像Django一樣完全使用正則來規定URL,
Event
Swoole提供了一個事件觸發系統,
$ php->event->raise(‘sendsms’,$ mobile,$sms_content);
這是一個很酷的設計,如果在本地測驗環境中,你可是配置為同步,那么raise引發一個時間后,去執行事件對應的handle函式,如果是服務器環境,可以設定為異步,那么raise只會向Queue服務器投遞一個事件,在后臺啟動一個守護行程,從Queue服務器取得事件,然后再用handle函式去處理,
Upload
swoole可以對上傳檔案統一處理,限制上傳大小,上傳圖片的話,可以自動壓縮圖片尺寸,產生縮略圖,
三、部署方式和壓力測驗
Swoole框架可以像正常的PHP一樣方式部署于典型的LAMP環境,也可以采用Swoole本身提供的Http Server方式運行,
普通LAMP方式,由于每次請求包含的php檔案較多,最好安裝APC等OPCode快取,壓力測驗,同樣的代碼,運行效率略低于thinkphp,但遠超CodeIgniter,差不多是2倍以上,
值得一提的是以Server方式運行的Swoole,性能極為強悍,是同樣代碼Apache部署環境下的將近8-14倍,而且記憶體占用很少,
代碼:
<?php
require('config.php');
define('SESSION_CACHE','file://localhost#sess');
require(LIBPATH.'/function/cli.php');
//Mime格式
require(LIBPATH.'/data/mimes.php');
$mime_types = array_flip($mimes);
//靜態檔案許可
$static_files = array_flip(array('static','templates','swoole_plugin','favicon.ico','robot.txt'));
$static_access = array_flip(array('html','htm','jpg','gif','png','js','css'));
//加載全部controller
import_all_controller();
$_SERVER['run_mode'] = 'server';
$_SERVER['server_driver'] = 'SelectTCP'; //BlockTCP,EventTCP,SelectTCP
$_SERVER['server_host'] = '0.0.0.0';
$_SERVER['server_port'] = 8888;
$_SERVER['server_processor_num'] = 4; //啟用的行程數目
$_SERVER['session_cookie_life'] = 86400; //保存SESSION_ID的cookie存活時間
$_SERVER['session_life'] = 1800;
$php->runServer();
測驗代碼:
Php代碼
<?php
class page extends Controller
{
function index()
{
$data = createModel('UserInfo')->get(12)->get();
$this->swoole->tpl->assign('data',$data);
$html = $this->swoole->tpl->fetch('test.html');
$time = $this->showTime();
return $html.$time;
}
}
Shell代碼
ab -c 100 -n 1000 -k http://127.0.0.1:8888/page/index/
Requests per second
Time per request (mean)
Time per request (mean, across all concurrent requests)

在我的Ubuntu下進行測驗(Inter core E5300+2G記憶體,同時有其他軟體運行ecilpse,firefox,chrom),Apache只跑到了 80多RPS,4行程的Swoole Server竟然跑到了驚人的1153RPS,
可以用apache ProxyPass方式,或者是Nginx upstream進行代理分發和負載均衡,
點關注,不迷路
好了各位,以上就是這篇文章的全部內容了,能看到這里的人呀,都是人才,之前說過,PHP方面的技術點很多,也是因為太多了,實在是寫不過來,寫過來了大家也不會看的太多,所以我這里把它整理成了PDF和檔案,如果有需要的可以
點擊進入暗號: PHP+「平臺」


更多學習內容可以訪問【對標大廠】精品PHP架構師教程目錄大全,只要你能看完保證薪資上升一個臺階(持續更新)
以上內容希望幫助到大家,很多PHPer在進階的時候總會遇到一些問題和瓶頸,業務代碼寫多了沒有方向感,不知道該從那里入手去提升,對此我整理了一些資料,包括但不限于:分布式架構、高可擴展、高性能、高并發、服務器性能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell腳本、Docker、微服務、Nginx等多個知識點高級進階干貨需要的可以免費分享給大家,需要的可以加入我的 PHP技術交流群
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/136326.html
標籤:其他
