一、Swoole架構介紹
swoole是一套設計非常精巧,有效提高開發效率的PHP架構。Swoole有統一的唯一全域對象,類似於Java的註冊樹,掛載了常用的一些對象,如資料庫、模板引擎、緩衝系統、日誌系統、事件處理系統等。可以很方便地調用功能,快速開發。使用swoole架構,僅需配置一個config.php檔案,在其他PHP檔案中只需要require config.php檔案,即可調用架構的所有功能。
swoole通過設定檔可以實現在輕鬆更換模組驅動方式。比如資料庫連接,可以很方便得在Pdo MySQL MySQLi之間更換。緩衝可以用filecache,也可以用dbcache,還可以用memcache。日誌可以用資料庫日誌,也可以用系統日誌或檔案日誌。
代碼:
Php代碼 <?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代碼 <?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