
最近在调研新项目的启动框架,目标开发语言是 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 有偏见,所以没怎么考虑。 |