天天看点

swoole| swoole wiki 笔记初心swoole 功能一览swoole 协程swoole 协程 serverswoole 协程 clientswoole 进程 & 进程池其他编程指引phpNP(network programming)基础devops

初心

PHP想做微服务, 离不开 swoole. 而 swoole 进入协程时代后, 是时候抛开历史的包袱, 轻装上阵了. 希望这样过一份 swoole 知识的梳理, 能对 PHPer 有所帮助.

梳理 swoole wiki 的方向建议: 尽量用协程, 实在不行就同步, 所有的知识都围绕这展开.

swoole 功能一览

重点

  • 协程 server(继承关系): server(tcp/udp) http(http/http2) websocket
  • 协程 client: client http http2 socket pgsql zookeeper
  • 协程 runtime
  • process:

    Server->addProcess()

    process process-pool

辅助

  • memory: lock buffer table atomic mma
  • timer: tick after; server 中的 Timer 也会自动创建协程
  • event
  • 同步 client: client

历史版本, 只做了解, 不要造成心智负担(可以不看)

swoole 协程

swoole 协程 server

swoole| swoole wiki 笔记初心swoole 功能一览swoole 协程swoole 协程 serverswoole 协程 clientswoole 进程 & 进程池其他编程指引phpNP(network programming)基础devops
swoole| swoole wiki 笔记初心swoole 功能一览swoole 协程swoole 协程 serverswoole 协程 clientswoole 进程 & 进程池其他编程指引phpNP(network programming)基础devops
swoole| swoole wiki 笔记初心swoole 功能一览swoole 协程swoole 协程 serverswoole 协程 clientswoole 进程 & 进程池其他编程指引phpNP(network programming)基础devops

swoole 协程 client

swoole 进程 & 进程池

其他

  • swoole相关函数
  • 附录: linux信号 linux错误码 swoole错误码 tcp连接状态 tcpdump/strace/gdb/lsof/perf

编程指引

  • swoole 快速起步 daydaygo/php-note : swoole API 简单 demo, 方便速查
  • 学习 swoole 需要掌握的基础知识 : linux高性能服务器编程; UNP; tcp/ip详解
  • swoole 编程注意事项 : 语言相关/协程编程/并发编程/内存管理/进程隔离
  • 版本更新记录 : 仔细看看, 就能体会到开发组的努力
  • 版本路线路线图: trello [rfc-chinese]() rfc
  • 编程建议(个人看法)
    • 基础知识的补充和扎实, 远比对 API 的熟悉要强, 建议花时间理解: 网络编程基础; 同步/异步/协程基本概念; swoole进程/线程模型; swoole各组件+组件功能+组件生命周期
    • 编程方式: 尽量使用协程, 实在不行就同步; 好处很明显, 关注swoole功能的子集, 理解和熟悉API 都容易不少
    • 建议不使用别名, 直接使用原写法, 如

      Server->tick()

      \Swoole\Timer::tick()

      的别名
    • 建议除了

      go() chan()

      等十分常用的函数, 不要使用简写, 直接使用原写法, 如

      Co::sleep()

      \Swoole\Coroutine::sleep()

      的简写

php

  • callback
  • 信号处理 ext-pcntl
  • 原生socket

    ext-socket

    stream_socket_client()

  • memory_get_usage() + memory_limit

    来做内存检测 -> 防止 worker 内存溢出, 配合

    exit()

    退出worker进程, manager 进程会自动拉起新的 worker 进程

NP(network programming)基础

swoole| swoole wiki 笔记初心swoole 功能一览swoole 协程swoole 协程 serverswoole 协程 clientswoole 进程 & 进程池其他编程指引phpNP(network programming)基础devops

): 为什么需要协议->tcp是流式(stream), 需要协议设定边界; 设计->换行符/固定包头

  • 多进程共享数据 : 为什么->进程隔离; ext-apcu/yac(仅作缓存)/swoole memory系列组件
  • 进程信号处理:

    pcntl_signal() / pcntl_signal_dispatch()

  • 并发编程: 并发执行->为每个客户端/请求, 创造不同资源和上下文(context)
  • 内核参数调整

    sysctl -a

    查看所有内核参数;

    /proc/sys/

    文件夹

devops

  • 实践推荐
    • 项目git -> 绑定阿里云容器镜像服务 -> 关联容器服务(小型项目可以先用 swarm 验证, 大型复杂项目转k8s)
    • git 更新 -> 触发镜像自动构建 -> 镜像构建完后, 触发容器自动部署
    • 开发: 同一份镜像, 开发环境统一
    • 使用容器来管理服务生命周期, 替代传统的服务管理方式( systemd ; 开机启动

      ->reload()

      等服务管理函数
  • swoole 安装
    • PHP版本( PHP版本支持 ): 推荐 >=7.2; 只有同步 client 可以在 fpm 下使用
    • 安装实例: docker - swoft/alphp
    • 编译参数: 上面 Dockerfile 中的示例就够了, 还可添加

      --enable-coroutine-postgresql

  • 监控/日志/性能/工具
  • 案例