zoukankan      html  css  js  c++  java
  • [手把手教你] 用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:WWWswoft-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:WWWswoft-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

    大功告成!

  • 相关阅读:
    Spring Boot 配置元数据指南
    面试中常被提到的最左前缀匹配原则
    MyBatis缓存机制(一级缓存,二级缓存)
    计算机网络基础知识
    垃圾收集算法与垃圾收集器
    递归与分治策略
    五种IO模型和BIO,NIO,AIO
    七种阻塞队列
    ConcurrentHashMap(1.7版本和1.8版本)
    重入锁 ReentrantLock
  • 原文地址:https://www.cnblogs.com/liliuguang/p/10464062.html
Copyright © 2011-2022 走看看