Phalcon有着強大的性能同時又具備完整的MVC模式,
Swoole也具備在Phalcon之外的其他能力,如果把兩者無縫的結合,
一定是一個不錯的案例.
所以本項目 同時支持 Nginx+Phalcon 與 Swoole+Phalcon,
如果使用Nginx做負載均衡,可以做到無縫銜接,有Nginx+php-fpm的穩定,
同時也能享受Swoole對於API的超高性能.
本案例可以作爲系統服務使用, 也可以做Restful開發使用,作爲Web使用更是毫無問題.
使用 wrk 做的的壓測, 在MBP上的結果:
wrk -c10000 -d10s --latency http://127.0.0.1:8080/testRunning 10s test @ http://127.0.0.1:8080/test
2 threads and 10000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 38.66ms 50.01ms 266.35ms 81.83%
Req/Sec 12.97k 1.54k 16.65k 88.17%
Latency Distribution
50% 11.53ms
75% 68.33ms
90% 116.48ms
99% 183.72ms
242375 requests in 10.06s, 36.59MB read
Requests/sec: 24104.01
Transfer/sec: 3.64MB
非常不錯的結果.
Installation
** Web服務兼容Nginx+PHP-FPM模式,可以參考Phalcon的Nginx配置.
依賴:
Ubuntu 16.04LTS/18.04LTS
PHP: 7.0+, 推薦 7.2或以上
Beantalkd 隊列處理依賴
php擴展 Phalcon 3.x+
php擴展 Swoole 2.x+
php擴展 Redis
php擴展 Pdo,Pdo MySQL
####初始化
composer install -o
開啓 HttpServer 服務: 建議使用Nginx做負載均衡,使PHP-FPM可以和Swoole的HttpServer同時提供服務.
./web_serve start
可以使用sys/systemd/StdWebServer.GenService.php可以生成systemd service文件, 根據提示安裝成服務.
cd sys/systemd/
php StdWebServer.GenService.php
開啓 WebSocketServer 服務:
./web_socket_serve start
可以使用 sys/systemd/StdWebSocketServer.GenService.php 可以生成systemd service文件, 根據提示安裝成服務.
cd sys/systemd/
php StdWebSocketServer.GenService.php
Configuration
環境配置
在項目的/目錄下,建立空文件 .development 或 .testing則指定裏開發環境與測試環境, 沒有文件爲生產環境. 文件同時存在, 有限開啓開發環境.
#開發環境
rm .testing && touch .development
#測試環境
rm .development && touch .testing
#生產環境
rm .development .testing
數據庫,Redis等配置:
Web與Cli分開配置,配置文件位於:
- App部分: /app/config/config.php
- Cli部分: /cli/config/config.php
Swoole Http Server 配置:
- 配置文件: /sys/config/std_web_server.php
Swoole WebSocket Server 配置:
- 配置文件: /sys/config/std_web_socket_server.php
Features
- Phalcon 完整支持
- Http 服務器
- WebSocket 服務器
- 多進程Task Worker 任務處理
- Beantalk 隊列
- Systemd自啓服務
Documents
###多進程Task任務處理 該服務會在任務處理完成後,持續拉起服務,所以可以實現類似php-fpm的特點, 任務處理指定次數後退出任務,服務會自動拉起服務.
具體可以參考/cli/tasks/MailSenderTask.php, 複寫 RealWork 函數進行真實的任務處理即可, 調用方式:
#查看幫助信息
./run mailsender -h
#參數 6 爲開啓6個子進程同時處理任務
./run mailsender 6
本文來自雲棲社區合作伙伴“開源中國”
本文作者:局長