摘要:是一個基于擴(kuò)展實現(xiàn)的輕量級高性能的常駐內(nèi)存型的和應(yīng)用服務(wù)框架高度封裝了,,服務(wù)器,以及基于實現(xiàn)可擴(kuò)展的服務(wù),同時支持包方式安裝部署項目?;趯嵱?,抽象事件處理類,實現(xiàn)與底層的回調(diào)的解耦,支持同步異步調(diào)用,內(nèi)置等常用組件等。
swoolefy
swoolefy是一個基于swoole擴(kuò)展實現(xiàn)的輕量級高性能的常駐內(nèi)存型的API和Web應(yīng)用服務(wù)框架,高度封裝了http,websocket,udp服務(wù)器,以及基于tcp實現(xiàn)可擴(kuò)展的rpc服務(wù),同時支持composer包方式安裝部署項目?;趯嵱茫瑂woolefy抽象Event事件處理類,實現(xiàn)與底層的回調(diào)的解耦,支持同步|異步調(diào)用,內(nèi)置view、Log、session、mysql、redis、memcached、mongodb等常用組件等。
swoolefy是一個適合學(xué)習(xí)swoole的框架,特別適合中小團(tuán)隊,用過Tp的phper基本都會用,有過Yii2的經(jīng)驗者,那就更容易入手了。同時swoolefy底層屏蔽了swoole與傳統(tǒng)php-fpm的一些差異,讓大部分的phper使用起來可以像使用php-fpm那樣,輕松入手。
實現(xiàn)的功能特性1、輕量級的框架,實現(xiàn)路由與調(diào)度,MVC三層,當(dāng)然也可以配置多層
2、支持composer的PSR4規(guī)范和實現(xiàn)自定義注冊命名空間
3、支持多協(xié)議,目前支持http,websocket,tcp,udp,以及基于tcp實現(xiàn)的rpc,開放式的系統(tǒng)接口,可自定義協(xié)議數(shù)據(jù)格式
4、抽象Event的事件處理與底層的事件監(jiān)聽解耦,屏蔽不同協(xié)議之間的應(yīng)用差異,大部分代碼實現(xiàn)共用
5、實現(xiàn)超全局變量,IOC,靜態(tài)延遲綁定,組件服務(wù)常駐內(nèi)存化,trait的多路復(fù)用,鉤子事件,單例,工廠模式等
6、簡單易用的異步任務(wù)管理TaskManager, 定時器管理TickManager, 內(nèi)存表管理TableManager, 進(jìn)程管理ProcessManager,異常管理,超全局管理
7、靈活多層的配置,配置參數(shù)即可實現(xiàn)底層已封裝的復(fù)雜功能
8、應(yīng)用對象的深度復(fù)制,實現(xiàn)對象的常駐內(nèi)存,每個請求只需要從內(nèi)存中復(fù)制應(yīng)用對象,不需要再重新創(chuàng)建,減少IO消耗
9、封裝View,Log,Mysql,Redis,Mongodb,Swiftmail,Session等常用組件,其他組件根據(jù)業(yè)務(wù)按照約定即可封裝成組件
10、實現(xiàn)異步半阻塞與全異步非阻塞,EventHander與底層解耦
11、基于inotify實現(xiàn)自動監(jiān)控swoole服務(wù)的文件變動,實現(xiàn)worker自動reload,智能郵件通知
12、命令行形式高度封裝啟動|停止控制的腳本,簡單命令即可管理整個框架
項目地址:https://github.com/bingcool/s...,歡迎issue
完善的文檔手冊
壓測環(huán)境:1核2G內(nèi)存的虛擬機(jī),沒有任何調(diào)優(yōu),100并發(fā),100000請求,壓測輸出hello world
ab -c 100 -n 100000 http://127.0.0.1:81/Index/index
壓測可以達(dá)到2600qps
1、swoolefy建議用在單個或多個的服務(wù)中,例如異步郵件統(tǒng)發(fā)中心,搜索中心,日志上報中心,聊天系統(tǒng),實時數(shù)據(jù)上報中心。比如用于實現(xiàn)了基于solr的產(chǎn)品搜索中心,店慶時交易系統(tǒng)實時訂單以及銷售數(shù)據(jù)看板
2、對于復(fù)雜的業(yè)務(wù)場景,不建議使用swoolefy,傳統(tǒng)的php-fpm是最好的選擇,當(dāng)然,分拆服務(wù)解耦后,某些服務(wù)可以使用swoolefy來實現(xiàn)。
1、支持php7.0+
2、搭建lnmp環(huán)境,建議使用lnmp一健安裝包,https://lnmp.org, 建議安裝lnmp1.4
3、安裝php必要的擴(kuò)展,本框架需要的擴(kuò)展包括swoole(1.9.17+), swoole_serialize(https://github.com/swoole/swo... inotify, pcntl, posix, zlib, mbstring,可以通過php-m查看是否安裝了這些擴(kuò)展,如果通過lnmp1.4一健安裝包安裝的,已經(jīng)默認(rèn)安裝好這四個pcntl, posix, zlib, mbstring擴(kuò)展的,只需要在安裝swoole和swoole_serialize, inotify即可,具體安裝過程參考官方文檔
為了方便開發(fā)和測試,我打包了一個基于alpine基礎(chǔ)鏡像搭建的php7.1環(huán)境容器bingcool/php2swoole:2.4,這個image已經(jīng)非常小了,已經(jīng)安裝所有的必須擴(kuò)展,其中swoole是1.10.4版本,可以通過php --ri swoole 查看信息。
alpine的官網(wǎng):https://pkgs.alpinelinux.org/...
docker pull bingcool/php2swoole:2.4
已安裝的擴(kuò)展如下:
bz2 Core curl date fileinfo filter ftp gd hash imagick inotify json libxml mbstring mcrypt memcached mongodb mysqlnd openssl pcntl pcre PDO pdo_mysql posix readline redis Reflection session SimpleXML soap sockets SPL standard swoole swoole_serialize xml xmlrpc Zend OPcache zip zlib [Zend Modules] Zend OPcache開發(fā)部署
1、如果是自己安裝的php環(huán)境(需在linux環(huán)境下),最好先創(chuàng)建一個不能登錄偽用戶www,用來執(zhí)行worker進(jìn)程業(yè)務(wù)代碼
useradd www -d /home/www -s /sbin/nologin
則在某一個web目錄,例如/home/www下
參考文檔
2、使用bingcool/php2swoole容器啟動php開發(fā)環(huán)境
下面是簡單使用,首先是啟動容器
docker run -it -d --name dev -p 9502:9502 -v /home/www/:/home/www/ bingcool/php2swoole:2.4
-v /home/www/:/home/www/ 是將縮主機(jī)的/home/www目錄掛載到容器的/home/www
(1)然后進(jìn)入容器
docker exec -it dev /bin/sh
容器中已經(jīng)安裝好composer和git等工具,然后利用composer方式來安裝部署一個項目,同樣參考
參考開發(fā)文檔
1、啟動文件自動監(jiān)控程序,進(jìn)入項目目錄
當(dāng)前終端啟動:php start.php start monitor 守護(hù)進(jìn)程啟動:php start.php start monitor -d 停止:php start.php stop monitor
可以在配置文件swoolefy/protocol/monitor/config.php設(shè)置。監(jiān)控程序自動監(jiān)控php的文件變動,然后swoole的worker自動重啟,這個文件其實是通過調(diào)用代碼Shell文件夾的swoole_monitor.sh來監(jiān)控9502端口(這個是swoole的http服務(wù)的默認(rèn)端口),根據(jù)端口監(jiān)聽,可以設(shè)置不同端口,監(jiān)聽不同協(xié)議服務(wù)。
需要注意的是,由于在容器中/home/www的目錄是掛載與縮主機(jī)的,inotify是無法監(jiān)聽到文件變動的,所以這個監(jiān)控程序在容器環(huán)境中是無效的,每次修改代碼必須重啟
2、啟動swoole的http服務(wù),進(jìn)入進(jìn)入項目目錄
啟動:php swoolefy start http 守護(hù)進(jìn)程啟動:php swoolefy start http -d 停止:php swoolefy stop http
默認(rèn)端口是9502,可以在配置文件protocol/http/config.php中更改,同時對應(yīng)的protocol/monitor/config.php中對應(yīng)更改端口,實現(xiàn)不同的自動重載。
注意文件權(quán)限問題
1、啟動swoole的websocket服務(wù),進(jìn)入swoolefy
啟動:php swoolefy start websocket 守護(hù)進(jìn)程啟動:php swoolefy start websocket -d 停止:php swoolefy stop websocket
默認(rèn)端口9503,可以在配置文件protocol/websocket/config.php中更改
rpc服務(wù)1、啟動swoole的rpc服務(wù),進(jìn)入進(jìn)入項目目錄
啟動:php swoolefy start rpc 守護(hù)進(jìn)程啟動:php swoolefy start rpc -d 停止:php swoolefy stop rpc
默認(rèn)端口9504,可以在配置文件protocol/rpc/config.php中更改。
udp服務(wù)1、啟動swoole的rpc服務(wù),進(jìn)入進(jìn)入項目目錄
啟動:php swoolefy start udp 守護(hù)進(jìn)程啟動:php swoolefy start udp -d 停止:php swoolefy stop udp
默認(rèn)端口9505,可以在配置文件protocol/udp/config.php中更改。
訪問Index在App/Controller中就可以編碼測試,基本和thinkphp的mvc那樣操作。
比如在App/Controller/IndexController.php
response->end("hello word!"); } }
那么直接在瀏覽器輸入http://ip:9502/Index/index
若需要渲染模板
assign("name","hello word!"); $this->display("index.html"); }
對應(yīng)的路由規(guī)則:
controller/action
如果存在module模塊:
module/controller/action
具體的可以參考App/Controller/的demo
如果需要使用mysql,redis,mongodb這些組件功能,請安裝對應(yīng)的擴(kuò)展和服務(wù),并在App/Config/config.php中配置。這個與Yii2的Component相似.
nginx代理為了使用更好支持的HTTP協(xié)議,建議前端使用nginx作為代理,更多功能可以看proxy模塊來設(shè)置
location / { proxy_http_version 1.1; proxy_set_header Connection "keep-alive"; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://127.0.0.1:9502; }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28119.html
摘要:基于實用,抽象事件處理類,實現(xiàn)與底層的回調(diào)的解耦,支持協(xié)程調(diào)度,同步異步調(diào)用,全局事件注冊,心跳檢查,異步任務(wù),多進(jìn)程池等,內(nèi)置等常用組件等。 swoolefy是一個基于swoole實現(xiàn)的輕量級高性能的常駐內(nèi)存型的API和Web應(yīng)用服務(wù)框架, 高度封裝了http,websocket,udp服務(wù)器,以及基于tcp實現(xiàn)可擴(kuò)展的rpc服務(wù), 同時支持composer包方式安裝部署項目?;趯?..
摘要:易用穩(wěn)定,本次想通過對的學(xué)習(xí)和個人解析,吸收框架的思想和設(shè)計知識,加強自己對的認(rèn)知和理解。當(dāng)然,筆者能力水平有限,后續(xù)的文章如有錯誤,還請指出和諒解。目錄如下后續(xù)添加文章都會記錄在此服務(wù)啟動過程以及主體設(shè)計流程源碼解析 前言 swoole是什么?官網(wǎng)的原話介紹是這樣的: Swoole 使用純 C 語言編寫,提供了 PHP 語言的異步多線程服務(wù)器,異步 TCP/UDP 網(wǎng)絡(luò)客戶端,異步 ...
摘要:框架最新源代碼行數(shù)行,因此可以很容易的改造它,成為你們公司的專屬框架。也不同于其他基于的微服務(wù)框架,只聚焦于微服務(wù)治理,定位于開發(fā)的更多領(lǐng)域,覆蓋從初創(chuàng)到億元級體量的技術(shù)訴求。的授權(quán)全靠用戶自愿購買,詳情 MixPHP是什么 MixPHP 是秉承 普及 PHP 常駐內(nèi)存型解決方案,促進(jìn) PHP 往更后端發(fā)展 的理念而創(chuàng)造,采用 Swoole 擴(kuò)展作為底層引擎,圍繞常駐內(nèi)存的方式而設(shè)計,...
閱讀 2112·2023-04-26 02:41
閱讀 2155·2021-09-24 09:47
閱讀 1562·2019-08-30 15:53
閱讀 1216·2019-08-30 13:01
閱讀 1896·2019-08-29 11:27
閱讀 2872·2019-08-28 17:55
閱讀 1781·2019-08-26 14:00
閱讀 3396·2019-08-26 10:18