php内置开发服务器的最大并发连接数

7
我在使用php内置的Web服务器时遇到了一个问题,它似乎只允许单个并发连接。当我测试一些并发的ajax请求时,我发现了这个问题,所有请求似乎同时完成。
这不是什么大问题,因为我可以随时启动Apache来解决这个问题(这也是我得出上述结论的方式),但我已经习惯了直接从我的IDE运行PHP。
有没有办法增加它,或者这是PHP的限制?
以下是我的示例代码:它在内置服务器上被阻塞,但在Apache上运行良好:
        $.ajax({
            type: "POST",
            url: slow.php,
            data: "",
            success: function(data){
                clearInterval(checkid);
                console.log('slow call finished');
            }
        });

        checkid = setInterval(function(){
            $.get('somefile.txt', function(data){
                console.log('quick call finished');
            });
        },1000);


        //slow.php
        sleep(10);
        echo 'all done';

1
PHP有内置的Web服务器吗?据我所知,它是在像Apache或nginx这样的Web服务器上运行的。 - Bailey Herbert
1
@BaileyHerbert,你的了解不完全准确!自 PHP 5.4 起,这是一个基本的开发服务器:http://php.net/manual/en/features.commandline.webserver.php。 - Steve
根据您要获取的内容,您可以复制开发服务器。我曾经为处理API请求同时处理图像服务而这样做。显然,这只适用于快速开发。 - Justin Dalrymple
1个回答

10

引用自手册

如果请求被阻塞,PHP应用程序将会停滞。

所以,是的,它是单线程的。此外,它只是开发过程中的一个辅助工具,在实际项目中你很少需要使用它,因为它不支持像 FallbackResourcemod_rewrite.htaccess 这样与大多数Web项目交织在一起的重要外部技术。

现代IDE(如PhpStorm)支持保存时自动部署到本地和远程测试服务器,这对于大型项目更加实用。


是的,我看过了,只是希望它可能是可配置选项。没关系!实际上我使用的是phpstorm,但是设置虚拟主机条目并编辑hosts文件以启用在我的首选文件夹中快速项目工作很烦人。谢谢。 - Steve
1
如果你有很多项目,考虑在本地DNS服务器中引入通配符TLD(http://projectname.internal),然后使用VirtualDocumentRoot,以便再也不必编写单个vhost条目。这是我们在拥有9名活跃开发人员的专业互联网局的工作方式。 - Niels Keurentjes
一般来说,PHP是单线程的...这意味着当Apache启动PHP请求时...每次都会启动一个单独的进程...在开发过程中需要理解这一点。 - Zilvinas
1
@Zilvinas,那是100%的错误。PHP通常作为Apache模块或通过FPM工作进程运行。在这两种情况下,相同的执行进程根据您的设置被循环使用数千次,以最小化操作系统开销。如果没有这个机制,性能将急剧下降。 - Niels Keurentjes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接