非常推荐PHP超高QPS框架,以及使用心得和经验

@Ta 2021-08-11发布,2021-08-11修改 3668点击

webman MVC框架,api框架,可部署在阿里云serverless函数计算上,超级廉价部署运营方式

https://www.workerman.net/doc/webman#/README

图片中,包括逻辑: 查询数据库判断用户登陆,给予正确的json返回。使用 apache AB测压,在并发请求1w,情况下的QPS截图
image.png

入门概述特点

  • 0: 此框架非常和thinkphp5.1与6相似
  • 1: 框架全面支持composer加载,tp的orm,tp的view视图引、tp的cache引擎、tp验证码、queue等
  • 2: 本质还是同步阻塞。webman没有协程,但是你可以在Cli启动webman之前,多设置 服务进程数量

与传统的PHP-fpm区别

  • 0: 控制器controller 和model 和view 和service 等等 变量都是常驻的, 如果上一个用户 在进程2中,变量accountInfo=12345,下一个用户来调用,如果没做重新赋值,变量仍然是accountInfo=272745

image.png

  • 1: 在代码内部任何的 echo var_dump 全部输出在终端,而不是web浏览器。和java开发的体验相似,想要输出到web,只能是return new Response

  • 2: 获取用户的request请求,你只能在中间件和 controller->Action(Request $request)中获取到,无法通过任何依赖注入的类中获取到,并且只有通过这两个方式获取的request请求是最新的,否则都是 null of Request Class

经验

拿到手的第一步, php composer.phar install 安装依赖拓展
拿到手的第二步,需要新建 .env 环境配置。
特别是要设置 SERVER_PROCESS_COUNT,如果你不设置 进程数量,webman会执行cpu_count(),这个方法内部调用 shell函数,如果你禁止了危险函数就会报错。


##############CORE##################
APP_DEBUG=true
#默认Cli启动框架,监听的 协议://网卡:端口
HTTP_SERVER_ADDR=http://127.0.0.1:8080
SESSION_DRIVER=file
#检测文件自动变换
monitor_enable=true
#CPU进程数量
SERVER_PROCESS_COUNT=1
#############DATABASE###############
DB_HOST =  127.0.0.1
DB_DATABASE =  databse_name
DB_USERNAME =  root
DB_PASSWORD =  123456
DB_PORT =  3306
DB_PREFIX = cap_

###############REDIS###################
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=
REDIS_PORT=6379

使用Thinkphp Orm模型

说明: 因为webman常驻内存,所以每一个进程需要 定时查询数据库,来保持TCP心跳,否则会被mysql服务器断开TCP

config\bootstrap.php 这个配置表,会让每个 服务数量*(每个服务进程数量)进行读取,
如果 你有webman (16个进程),monitor(1个进程),启动后,就会有17个 mysql与tcp进程
image.png

安装:orm

 php composer.phar require topthink/think-orm

修改 support\Db.php

image.png

新建 support\db\ThinkphpHeartbeat.php
主要是 每个服务下的每个进程 对应的thinkphp-orm进程服务 保持连接
image.png

修改 注入表

image.png

回复列表(4|隐藏机器人聊天)
  • @Ta / 2021-08-11 / /
    QPS带有简单业务查询的情况下,达到了4032, 同样我使用宝塔推荐配置的nginx+php-fpm 只有50-300
  • @Ta / 2021-08-11 / /

    “现今PHP的性能已经足够优秀,真正的瓶颈其实在于IO”,原话好像是这样,但不是我说的,不过我赞同这个观点。
    ~~~

  • @Ta / 2021-08-11 / /
    @㝶芾厶眵攴䭡, 虽然 php 可以通过分布式部署,等提高系统QPS,但是 fpm对于机器的压榨不够出色。

    现在 其实 计算语言本身不是瓶颈, 真正的瓶颈我认为 就是在数据库io,所以 要做 索引,缓存查询,主从隔离查询等等
  • 000
    @Ta / 2021-08-11 / /

    看着很不错 和socket的PHP框架类似?感觉是学不动了

添加新回复
回复需要登录