怎麼使用Swoft 搭建微服務(TCP RPC)PHP中高階進階
阿新 • • 發佈:2019-12-31
Swoft 框架是首個基於Swoole 原生協程的新時代 PHP高效能協程全棧框架,內建協程網路伺服器及常用的協程客戶端,常駐記憶體,不依賴傳統的 PHP-FPM。
如何搭建微服務?
首先確保已經可以正確搭建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
phper在進階的時候總會遇到一些問題和瓶頸,業務程式碼寫多了沒有方向感,不知道該從那裡入手去提升,對此我整理了一些資料,包括但不限於:分散式架構、高可擴充套件、高效能、高併發、伺服器效能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell指令碼、Docker、微服務、Nginx等多個知識點高階進階乾貨需要的可以免費分享給大家,需要請戳這裡
最後,祝所有大家在面試中過關斬將,拿到心儀offer。如果想與一群3-8年資深開發者一起交流學習的話,需要點選這裡