真正的PHP Web開發框架之Swoole,你真的知道嗎?!

2020-09-28 20:01:11

一、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技術交流群