如何在Symfony内置Web服务器中启用多服务进程?
解决Symfony内置服务器下Browsershot无法捕获本地页面的问题
问题根源
Symfony内置的PHP Web服务器默认采用单进程模式,当你在/create-img-from-html接口中调用Browsershot请求本地localhost:8000/test时,主进程被当前请求占用,无法处理新的并发请求,导致页面捕获失败。而请求外部URL时不存在这个阻塞问题,因此能正常工作。
解决方案
你需要在启动Symfony服务器时,设置PHP_CLI_SERVER_WORKERS环境变量来启用多进程模式,具体操作分系统:
Linux/macOS 终端
直接在启动命令前添加环境变量:
PHP_CLI_SERVER_WORKERS=2 symfony server:start
或者直接使用PHP内置服务器命令:
PHP_CLI_SERVER_WORKERS=2 php -S localhost:8000 -t public
Windows PowerShell
先设置环境变量再启动服务器:
$env:PHP_CLI_SERVER_WORKERS=2; symfony server:start
验证设置
启动服务器后,查看终端日志,如果出现类似Using 2 workers的提示,说明多进程模式已生效。此时再测试/create-img-from-html接口,Browsershot就能正常捕获本地页面的内容了。
注意事项
PHP_CLI_SERVER_WORKERS是PHP内置服务器的参数,不需要在Symfony的配置文件中设置,仅需在启动服务器时指定。- 该参数要求PHP版本≥7.4,你使用的PHP 8.1完全满足要求。
内容的提问来源于stack exchange,提问作者Lennart Bauer
相关产品推荐
相关产品推荐

