Phalcon+Swoole 無侵入解決方案 PhaService

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 

本文來自雲棲社區合作伙伴“開源中國”

本文作者:局長

原文鏈接


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章