序言
Swoft Framework
基於 Swoole 原生協程的新時代 PHP 全棧式協程框架
Swoft 是什么?
Swoft 框架是首個基於Swoole 原生協程的新時代 PHP高性能協程全棧框架,內置協程網絡服務器及常用的協程客戶端,常駐內存,不依賴傳統的 PHP-FPM
全異步非阻塞 IO 實現,以類似於同步客戶端的寫法實現異步客戶端的使用,沒有復雜的異步回調,沒有繁瑣的 yield,有類似 Go 語言的協程,靈活的注解
強大的全局依賴注入容器、完善的服務治理、靈活強大的 AOP、標准的 PSR 規范實現等
上面是官網描述, 感覺太官方, 我總結一下:
- 常駐內存
- 協程
- 學習曲線平滑
- 國內框架
- 開箱即用的RPC
如何搭建微服務?
首先確保已經可以正確搭建Swoft
不清楚的可以查看Swoft 官方文檔
鑒於每個人的開發環境都不同
這里選用官方Docker
作為開發環境
拉Docker 鏡像
docker pull swoft/swoft
非常的簡單
這樣就是成功了
為了方便理解
我們把swoft 復制兩份
命名為swoft-rpc
和swoft-http
swoft-rpc
只開啟TCP
服務 swoft-http
只開啟Http
服務
修改配置文件
把根目錄的.env.example
復制一份為.env
.env 文件為swoft 配置文件, 最高優先級(覆蓋config 下配置)
http 用到的配置
# Server
PFILE=/tmp/swoft.pid
PNAME=php-swoft
TCPABLE=false //是否同時啟動TCP 服務器,這里用不到改為false
CRONABLE=false
AUTO_RELOAD=true
AUTO_REGISTER=false
...
# HTTP
HTTP_HOST=0.0.0.0 //監聽的網卡
HTTP_PORT=80 //監聽的端口
HTTP_MODE=SWOOLE_PROCESS //不用管
HTTP_TYPE=SWOOLE_SOCK_TCP //不用管
...//mysql 和redis 略過
# User service (demo service)
USER_POOL_NAME=user //別名
USER_POOL_URI=192.168.1.214:8099,192.168.1.214:8099 //負載均衡,URI填寫為RPC 的地址,注意Docker和宿主之間的關系
USER_POOL_MIN_ACTIVE=5 //下面都不用管
USER_POOL_MAX_ACTIVE=10
USER_POOL_MAX_WAIT=20
USER_POOL_TIMEOUT=200
USER_POOL_MAX_WAIT_TIME=3
USER_POOL_MAX_IDLE_TIME=60
USER_POOL_USE_PROVIDER=false
USER_POOL_BALANCER=random
USER_POOL_PROVIDER=consul
RPC 用到的配置
# TCP
TCP_HOST=0.0.0.0 //監聽的網卡
TCP_PORT=8099 //監聽的端口
TCP_MODE=SWOOLE_PROCESS //不用管
TCP_TYPE=SWOOLE_SOCK_TCP //不用管
TCP_PACKAGE_MAX_LENGTH=2048 //最大鏈接數
TCP_OPEN_EOF_CHECK=false //不用管
啟動Docker 容器
docker run -it --rm -p 8099:8099 -v E:\WWW\swoft-rpc:/var/www/swoft swoft/swoft /bin/bash
這里用-it
和-v
方便調試
這樣就是成功啟動了
啟動RPC 服務
php bin/swoft rpc:start
RPC
服務只需要單獨啟動TCP
服務器
有的同學RPC
和TCP
的關系可能還沒弄清楚
這里RPC
服務和TCP
服務器可以類比為Web
服務和HTTP
服務器
監聽HTTP 來實現Web 服務
監聽TCP 來實現RPC 服務
就這樣理解吧
這樣就是成功啟動了
啟動Web服務
也就是啟動HTTP
服務器XD
新開一個終端來創建新容器
docker run -it --rm -p 9501:80 -v E:\WWW\swoft-http:/var/www/swoft swoft/swoft /bin/bash
這里端口改成9501, 因為本地開發環境已經用了80了:b
php bin/swoft server:start
因為在之前把自動開啟TCP 服務器禁用了
所以顯示Disabled
這樣也就是成功了!
訪問一下http://127.0.0.1:9501/
看下有沒有問題
沒問題的話, 可以看下官方提供的RPC demo http://127.0.0.1:9501/rpc/call
http://blog.leanote.com/post/zcmzcm/Swoft-RPC
大功告成!