[手把手教你] 用Swoft 搭建微服務(TCP RPC)


序言

Swoft Framework 
基於 Swoole 原生協程的新時代 PHP 全棧式協程框架

Swoft 是什么?

Swoft 框架是首個基於Swoole 原生協程的新時代 PHP高性能協程全棧框架,內置協程網絡服務器及常用的協程客戶端,常駐內存,不依賴傳統的 PHP-FPM

全異步非阻塞 IO 實現,以類似於同步客戶端的寫法實現異步客戶端的使用,沒有復雜的異步回調,沒有繁瑣的 yield,有類似 Go 語言的協程,靈活的注解

強大的全局依賴注入容器、完善的服務治理、靈活強大的 AOP、標准的 PSR 規范實現等

上面是官網描述, 感覺太官方, 我總結一下:

  • 常駐內存
  • 協程
  • 學習曲線平滑
  • 國內框架
  • 開箱即用的RPC

如何搭建微服務?

首先確保已經可以正確搭建Swoft

不清楚的可以查看Swoft 官方文檔

鑒於每個人的開發環境都不同

這里選用官方Docker 作為開發環境

Docker下載地址>>>

拉Docker 鏡像

  1. docker pull swoft/swoft

非常的簡單 
title 
這樣就是成功了

為了方便理解

我們把swoft 復制兩份

命名為swoft-rpcswoft-http

swoft-rpc只開啟TCP 服務 
swoft-http只開啟Http 服務

修改配置文件

把根目錄的.env.example復制一份為.env

.env 文件為swoft 配置文件, 最高優先級(覆蓋config 下配置)

http 用到的配置

  1. # Server
  2. PFILE=/tmp/swoft.pid
  3. PNAME=php-swoft
  4. TCPABLE=false //是否同時啟動TCP 服務器,這里用不到改為false
  5. CRONABLE=false
  6. AUTO_RELOAD=true
  7. AUTO_REGISTER=false
  8. ...
  9. # HTTP
  10. HTTP_HOST=0.0.0.0 //監聽的網卡
  11. HTTP_PORT=80 //監聽的端口
  12. HTTP_MODE=SWOOLE_PROCESS //不用管
  13. HTTP_TYPE=SWOOLE_SOCK_TCP //不用管
  14. ...//mysql 和redis 略過
  15. # User service (demo service)
  16. USER_POOL_NAME=user //別名
  17. USER_POOL_URI=192.168.1.214:8099,192.168.1.214:8099 //負載均衡,URI填寫為RPC 的地址,注意Docker和宿主之間的關系
  18. USER_POOL_MIN_ACTIVE=5 //下面都不用管
  19. USER_POOL_MAX_ACTIVE=10
  20. USER_POOL_MAX_WAIT=20
  21. USER_POOL_TIMEOUT=200
  22. USER_POOL_MAX_WAIT_TIME=3
  23. USER_POOL_MAX_IDLE_TIME=60
  24. USER_POOL_USE_PROVIDER=false
  25. USER_POOL_BALANCER=random
  26. USER_POOL_PROVIDER=consul

RPC 用到的配置

  1. # TCP
  2. TCP_HOST=0.0.0.0 //監聽的網卡
  3. TCP_PORT=8099 //監聽的端口
  4. TCP_MODE=SWOOLE_PROCESS //不用管
  5. TCP_TYPE=SWOOLE_SOCK_TCP //不用管
  6. TCP_PACKAGE_MAX_LENGTH=2048 //最大鏈接數
  7. TCP_OPEN_EOF_CHECK=false //不用管

啟動Docker 容器

  1. docker run -it --rm -p 8099:8099 -v E:\WWW\swoft-rpc:/var/www/swoft swoft/swoft /bin/bash

這里用-it-v方便調試 
title
這樣就是成功啟動了

啟動RPC 服務

  1. php bin/swoft rpc:start

RPC 服務只需要單獨啟動TCP 服務器

有的同學RPC 和TCP 的關系可能還沒弄清楚

這里RPC 服務和TCP 服務器可以類比為Web 服務和HTTP 服務器

監聽HTTP 來實現Web 服務 
監聽TCP 來實現RPC 服務

就這樣理解吧 
title 
這樣就是成功啟動了

啟動Web服務

也就是啟動HTTP 服務器XD

新開一個終端來創建新容器

  1. docker run -it --rm -p 9501:80 -v E:\WWW\swoft-http:/var/www/swoft swoft/swoft /bin/bash

這里端口改成9501, 因為本地開發環境已經用了80了:b

  1. php bin/swoft server:start

title
因為在之前把自動開啟TCP 服務器禁用了

所以顯示Disabled

這樣也就是成功了!

訪問一下http://127.0.0.1:9501/看下有沒有問題

沒問題的話, 可以看下官方提供的RPC demo http://127.0.0.1:9501/rpc/call

title

http://blog.leanote.com/post/zcmzcm/Swoft-RPC

大功告成!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM