摘要:是一個基于擴展實現的輕量級高性能的常駐內存型的和應用服務框架高度封裝了,,服務器,以及基于實現可擴展的服務,同時支持包方式安裝部署項目。基于實用,抽象事件處理類,實現與底層的回調的解耦,支持同步異步調用,內置等常用組件等。
swoolefy
swoolefy是一個基于swoole擴展實現的輕量級高性能的常駐內存型的API和Web應用服務框架,高度封裝了http,websocket,udp服務器,以及基于tcp實現可擴展的rpc服務,同時支持composer包方式安裝部署項目。基于實用,swoolefy抽象Event事件處理類,實現與底層的回調的解耦,支持同步|異步調用,內置view、Log、session、mysql、redis、memcached、mongodb等常用組件等。
swoolefy是一個適合學習swoole的框架,特別適合中小團隊,用過Tp的phper基本都會用,有過Yii2的經驗者,那就更容易入手了。同時swoolefy底層屏蔽了swoole與傳統php-fpm的一些差異,讓大部分的phper使用起來可以像使用php-fpm那樣,輕松入手。
實現的功能特性1、輕量級的框架,實現路由與調度,MVC三層,當然也可以配置多層
2、支持composer的PSR4規范和實現自定義注冊命名空間
3、支持多協議,目前支持http,websocket,tcp,udp,以及基于tcp實現的rpc,開放式的系統接口,可自定義協議數據格式
4、抽象Event的事件處理與底層的事件監聽解耦,屏蔽不同協議之間的應用差異,大部分代碼實現共用
5、實現超全局變量,IOC,靜態延遲綁定,組件服務常駐內存化,trait的多路復用,鉤子事件,單例,工廠模式等
6、簡單易用的異步任務管理TaskManager, 定時器管理TickManager, 內存表管理TableManager, 進程管理ProcessManager,異常管理,超全局管理
7、靈活多層的配置,配置參數即可實現底層已封裝的復雜功能
8、應用對象的深度復制,實現對象的常駐內存,每個請求只需要從內存中復制應用對象,不需要再重新創建,減少IO消耗
9、封裝View,Log,Mysql,Redis,Mongodb,Swiftmail,Session等常用組件,其他組件根據業務按照約定即可封裝成組件
10、實現異步半阻塞與全異步非阻塞,EventHander與底層解耦
11、基于inotify實現自動監控swoole服務的文件變動,實現worker自動reload,智能郵件通知
12、命令行形式高度封裝啟動|停止控制的腳本,簡單命令即可管理整個框架
項目地址:https://github.com/bingcool/s...,歡迎issue
完善的文檔手冊
壓測環境:1核2G內存的虛擬機,沒有任何調優,100并發,100000請求,壓測輸出hello world
ab -c 100 -n 100000 http://127.0.0.1:81/Index/index
壓測可以達到2600qps
1、swoolefy建議用在單個或多個的服務中,例如異步郵件統發中心,搜索中心,日志上報中心,聊天系統,實時數據上報中心。比如用于實現了基于solr的產品搜索中心,店慶時交易系統實時訂單以及銷售數據看板
2、對于復雜的業務場景,不建議使用swoolefy,傳統的php-fpm是最好的選擇,當然,分拆服務解耦后,某些服務可以使用swoolefy來實現。
1、支持php7.0+
2、搭建lnmp環境,建議使用lnmp一健安裝包,https://lnmp.org, 建議安裝lnmp1.4
3、安裝php必要的擴展,本框架需要的擴展包括swoole(1.9.17+), swoole_serialize(https://github.com/swoole/swo... inotify, pcntl, posix, zlib, mbstring,可以通過php-m查看是否安裝了這些擴展,如果通過lnmp1.4一健安裝包安裝的,已經默認安裝好這四個pcntl, posix, zlib, mbstring擴展的,只需要在安裝swoole和swoole_serialize, inotify即可,具體安裝過程參考官方文檔
為了方便開發和測試,我打包了一個基于alpine基礎鏡像搭建的php7.1環境容器bingcool/php2swoole:2.4,這個image已經非常小了,已經安裝所有的必須擴展,其中swoole是1.10.4版本,可以通過php --ri swoole 查看信息。
alpine的官網:https://pkgs.alpinelinux.org/...
</>復制代碼
docker pull bingcool/php2swoole:2.4
已安裝的擴展如下:
</>復制代碼
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
開發部署
1、如果是自己安裝的php環境(需在linux環境下),最好先創建一個不能登錄偽用戶www,用來執行worker進程業務代碼
</>復制代碼
useradd www -d /home/www -s /sbin/nologin
則在某一個web目錄,例如/home/www下
參考文檔
2、使用bingcool/php2swoole容器啟動php開發環境
下面是簡單使用,首先是啟動容器
</>復制代碼
docker run -it -d --name dev -p 9502:9502 -v /home/www/:/home/www/ bingcool/php2swoole:2.4
-v /home/www/:/home/www/ 是將縮主機的/home/www目錄掛載到容器的/home/www
(1)然后進入容器
</>復制代碼
docker exec -it dev /bin/sh
容器中已經安裝好composer和git等工具,然后利用composer方式來安裝部署一個項目,同樣參考
參考開發文檔
1、啟動文件自動監控程序,進入項目目錄
</>復制代碼
當前終端啟動:php start.php start monitor
守護進程啟動:php start.php start monitor -d
停止:php start.php stop monitor
可以在配置文件swoolefy/protocol/monitor/config.php設置。監控程序自動監控php的文件變動,然后swoole的worker自動重啟,這個文件其實是通過調用代碼Shell文件夾的swoole_monitor.sh來監控9502端口(這個是swoole的http服務的默認端口),根據端口監聽,可以設置不同端口,監聽不同協議服務。
需要注意的是,由于在容器中/home/www的目錄是掛載與縮主機的,inotify是無法監聽到文件變動的,所以這個監控程序在容器環境中是無效的,每次修改代碼必須重啟
2、啟動swoole的http服務,進入進入項目目錄
</>復制代碼
啟動:php swoolefy start http
守護進程啟動:php swoolefy start http -d
停止:php swoolefy stop http
默認端口是9502,可以在配置文件protocol/http/config.php中更改,同時對應的protocol/monitor/config.php中對應更改端口,實現不同的自動重載。
注意文件權限問題
1、啟動swoole的websocket服務,進入swoolefy
</>復制代碼
啟動:php swoolefy start websocket
守護進程啟動:php swoolefy start websocket -d
停止:php swoolefy stop websocket
默認端口9503,可以在配置文件protocol/websocket/config.php中更改
rpc服務1、啟動swoole的rpc服務,進入進入項目目錄
</>復制代碼
啟動:php swoolefy start rpc
守護進程啟動:php swoolefy start rpc -d
停止:php swoolefy stop rpc
默認端口9504,可以在配置文件protocol/rpc/config.php中更改。
udp服務1、啟動swoole的rpc服務,進入進入項目目錄
</>復制代碼
啟動:php swoolefy start udp
守護進程啟動:php swoolefy start udp -d
停止:php swoolefy stop udp
默認端口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");
}
對應的路由規則:
</>復制代碼
controller/action
如果存在module模塊:
</>復制代碼
module/controller/action
具體的可以參考App/Controller/的demo
如果需要使用mysql,redis,mongodb這些組件功能,請安裝對應的擴展和服務,并在App/Config/config.php中配置。這個與Yii2的Component相似.
nginx代理為了使用更好支持的HTTP協議,建議前端使用nginx作為代理,更多功能可以看proxy模塊來設置
</>復制代碼
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;
}
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28119.html
摘要:基于實用,抽象事件處理類,實現與底層的回調的解耦,支持協程調度,同步異步調用,全局事件注冊,心跳檢查,異步任務,多進程池等,內置等常用組件等。 swoolefy是一個基于swoole實現的輕量級高性能的常駐內存型的API和Web應用服務框架, 高度封裝了http,websocket,udp服務器,以及基于tcp實現可擴展的rpc服務, 同時支持composer包方式安裝部署項目。基于實...
摘要:易用穩定,本次想通過對的學習和個人解析,吸收框架的思想和設計知識,加強自己對的認知和理解。當然,筆者能力水平有限,后續的文章如有錯誤,還請指出和諒解。目錄如下后續添加文章都會記錄在此服務啟動過程以及主體設計流程源碼解析 前言 swoole是什么?官網的原話介紹是這樣的: Swoole 使用純 C 語言編寫,提供了 PHP 語言的異步多線程服務器,異步 TCP/UDP 網絡客戶端,異步 ...
摘要:框架最新源代碼行數行,因此可以很容易的改造它,成為你們公司的專屬框架。也不同于其他基于的微服務框架,只聚焦于微服務治理,定位于開發的更多領域,覆蓋從初創到億元級體量的技術訴求。的授權全靠用戶自愿購買,詳情 MixPHP是什么 MixPHP 是秉承 普及 PHP 常駐內存型解決方案,促進 PHP 往更后端發展 的理念而創造,采用 Swoole 擴展作為底層引擎,圍繞常駐內存的方式而設計,...
閱讀 2092·2023-04-26 02:41
閱讀 2151·2021-09-24 09:47
閱讀 1552·2019-08-30 15:53
閱讀 1209·2019-08-30 13:01
閱讀 1891·2019-08-29 11:27
閱讀 2866·2019-08-28 17:55
閱讀 1758·2019-08-26 14:00
閱讀 3388·2019-08-26 10:18
极致性价比!云服务器续费无忧!
Tesla A100/A800、Tesla V100S等多种GPU云主机特惠2折起,不限台数,续费同价。
NVIDIA RTX 40系,高性价比推理显卡,满足AI应用场景需要。
乌兰察布+上海青浦,满足东推西训AI场景需要