從新定義PHP : swool

       使用PHP+Swoole做爲網絡通訊框架,可使企業IT研發團隊的效率大大提高,更加專一於開發創新產品。 Swoole底層內置了異步非阻塞、多線程的網絡IO服務器。PHP程序員僅需處理事件回調便可,無需關心底層。程序員

與Nginx/Tornado/Node.js等全異步的框架不一樣,Swoole既支持全異步,也支持同步。Swoole雖然是標準的PHP擴展,實際上與普通的擴展不一樣。普通的擴展只是提供一個庫函數。而swoole擴展在運行後會接管PHP的控制權,進入事件循環。當IO事件發生後,swoole會自動回調指定的PHP函數。web

swoole_server是異步服務器,因此是經過監聽事件的方式來編寫程序的。當對應的事件發生時底層會主動回調指定的PHP函數。如當有新的TCP鏈接進入時會執行onConnect事件回調,當某個鏈接向服務器發送數據時會回調onReceive函數。UDP服務器與TCP服務器不一樣,UDP沒有鏈接的概念。數據庫

啓動Server後,客戶端無需Connect,直接能夠向Server監聽的9502端口發送數據包。對應的事件爲onPacket。Http服務器只須要關注請求響應便可,因此只須要監聽一個onRequest事件。當有新的Http請求進入就會觸發此事件。事件回調函數有2個參數,一個是$request對象,包含了請求的相關信息,如GET/POST請求的數據。另一個是response對象,對request的響應能夠經過操做response對象來完成。$response->end()方法表示輸出一段HTML內容,並結束此請求。WebSocket服務器是創建在Http服務器之上的長鏈接服務器,客戶端首先會發送一個Http的請求與服務器進行握手。apache

握手成功後會觸發onOpen事件,表示鏈接已就緒,onOpen函數中能夠獲得$request對象,包含了Http握手的相關信息,如GET參數、Cookie、Http頭信息等。創建鏈接後客戶端與服務器端就能夠雙向通訊了。 * 客戶端向服務器端發送信息時,服務器端觸發onMessage事件回調 * 服務器端能夠調用$server->push()向某個客戶端(使用$fd標識符)發送消息。swoole提供了相似JavaScript的setInterval/setTimeout異步高精度定時器,粒度爲毫秒級。在Server程序中若是須要執行一下很耗時的操做,好比一個聊天服務器發送廣播,Web服務器中發送郵件。若是直接去執行這些函數就會阻塞當前進程,致使服務器響應變慢。緩存

Swoole提供了異步任務處理的功能,能夠投遞一個異步任務到TaskWorker進程池中執行,不影響當前請求的處理速度。建立一個TCP的同步客戶端,此客戶端能夠用於鏈接到咱們第一個示例的TCP服務器。向服務器端發送一個hello world字符串,服務器會返回一個 Server: hello world字符串。這個客戶端是同步阻塞的,connect/send/recv 會等待IO完成後再返回。同步阻塞操做並不消耗CPU資源,IO操做未完成當前進程會自動轉入sleep模式,當IO完成後操做系統會喚醒當前進程,繼續向下執行代碼。基於Swoole擴展開發的PHP web server&應用服務器, 內置框架。提供統一註冊樹,數據庫操做,模板,Cache,日誌,隊列,上傳管理,用戶管理等豐富的功能特性。服務器

swoole框架相比apache/fpm,主要是節省PHP框架和全局對象每次請求建立銷燬帶來的性能損耗。若是你的PHP代碼是裸echo的方式,swoole框架並無性能優點。swoole框架給程序員提供了最大的空間,與http請求無關的全局對象只須要構造一次。程序中還能夠對某些對象和數據進行緩存控制。9501就是swoole服務器監聽的地址。root設置爲靜態文件的目錄。當請求靜態文件是由Nginx/Apache直接處理,當請求的文件不存在時,發送給Swoole服務器,來進行處理。swoole

相關文章
相關標籤/搜索