最近在调研新项目的启动框架,目标开发语言是 PHP ,调研了一些常用的框架和新框架:
综合考虑下来(让自己写得舒服点、短时间就自己在开发、可能自己维护个两三年),最终还是决定用 Symfony 了。
值得一提的是,就上面几个调研的框架来看,fpm 下运行的情况下,Symfony 的响应速度是最快的。按照大众认识,Symfony 应该是最慢的才对。
虽然 Symfony 很快,但是在 fpm 下依然达不到 golang 吹心中的互联网 CURD Boy 的最低水平,为此我琢磨了下使用 Workerman 来作为 HTTP Server ,从而达到一个更好的性能水平。
实现路径很简单:
其中 Workerman 在最新版本的 HTTP 服务是已经支持 PSR 的了。 Symfony 方面官方也有维护 symfony/psr-http-message-bridge 。 基于社区资源,我搞了一个 Bundle ,地址是 https://github.com/tourze/workerman-server-bundle
要体验的话,很简单:
# symfony-cli 自行安装,大概率是要 FQ ,下面的命令最好也 FQ ,要不就自己改 composer 配置
symfony new --demo symfony0315 # 我目前只测试了 symfony5.4 ,其他版本的话自行解决
cd symfony0315
composer require tourze/workerman-server-bundle -vvv
bin/console workerman:http start
然后打开 http://127.0.0.1:8080/ 即可体验。在默认开启了 Web Profiler 的情况下,可以做到 10-20ms 的响应。创建配置文件 .env.local
来切换到 production 环境:
APP_ENV=prod
KERNEL_CLASS='App\Kernel'
APP_SECRET='$ecretf0rt3st'
SYMFONY_DEPRECATIONS_HELPER=999999
PANTHER_APP_ENV=panther
PANTHER_ERROR_SCREENSHOT_DIR=./var/error-screenshots
DATABASE_URL=sqlite:///%kernel.project_dir%/data/database_test.sqlite
MAILER_DSN=smtp://localhost
重启服务,此时刷新可以看到基本上可以保证请求在 10ms 内了,达到 phper 最低水准。 不会在 v2 贴图,图片就不放了。
这个思路同样试用于其他类似的 PHP 框架,只要实现了 PSR 请求规范,都可以通过类似方式来改造。类似的注意点有:
1
ss098 2022-03-15 22:39:22 +08:00
考虑一下 Laravel Octane ?性能一点也不差。
|
2
C603H6r18Q1mSP9N 2022-03-15 22:44:31 +08:00
赞,赞,赞
workerman 很强 我们 tp6+swoole 也很舒服 |
3
Dart 2022-03-15 23:16:17 +08:00
不知道你们如何评价一个 web 的性能的。感觉都差不多吧。之前用 Yii1 ,几年前用 phalcon 3/4 。够用难得去换了
|
4
ywisax OP @ss098 Laravel Octane 很早跑过 demo ,那时候还只支持 RoadRunner
Laravel Octane 针对 Laravel 做得更加多应该是 service 的自动处理,例如 service 的自动 reset 、依赖的清除等等,各个框架如果要兼容非 fpm 运行模式,应该都是做类似的处理。 因为实际没怎么用过 Laravel ,而且对 swoole 有偏见,所以没怎么考虑。 |
7
lyhiving 2022-03-16 06:54:52 +08:00 via Android
Hyperf 应该是国内最优解,laravel 应该是国外最优解
|
8
lizuoqiang 2022-03-16 15:49:20 +08:00
Workerman + Symfony => Swoole + Laravel => Hyperf
|
9
ywisax OP @lyhiving Hyperf 从来不是 PHP 开发最优解,跟 swoole 绑死,就已经劝退一大波人,这玩具远不如 Laravel ,国内 TP 也比它好不少。
|
10
Evilk 2022-03-16 22:36:12 +08:00
我们新项目已经全部转战 webman 了
主要是可以复用 composer 生态 这点是主因 |
11
ywisax OP @Evilk Webman 的确很厉害,开发体验、性能啥的挑不出明显毛病。
我唯一顾虑 Webman 的就是没降级到 FPM 的方案。 |
14
guanguans 2022-03-29 14:30:49 +08:00
symfony 用 [php-runtime/runtime]( https://github.com/php-runtime/runtime) 就可以了。symfony 已经支持了 [symfony/runtime]( https://github.com/symfony/runtime)。
|
15
limingxinleo 2022-04-05 20:32:42 +08:00
@ywisax Hyperf 还能跑在 Swow 环境下,等 Fiber 成熟,还会支持 Fiber
|
16
ywisax OP @limingxinleo hyperf 别能跟 swoole/swow 绑定那么死,还可以玩,现在这样太局限了。
|
19
limingxinleo 2022-04-15 19:19:19 +08:00
|
20
limingxinleo 2022-04-15 19:20:15 +08:00
|