如果使用PHP,如何解决c10k问题?

问题描述

| 我正在确定应用程序的体系结构,其中将使用“ Http KeepAlive”和“ long polling”来加快响应速度。 PHP有什么可以解决Tornado对c10k的问题吗? 我当时在考虑使用Nginx + PHP-FPM。但是,对于1000个活动的连接,会不会有1000个PHP-FPM进程? 然后,我认为我们将遇到与Apache之间存在许多固定连接的相同问题。是不是 编辑:我了解如果我只想要HTTP KeepAlive,Nginx就足够了。但是,如果我还想像龙卷风一样长时间进行投票怎么办? PHP中有类似的东西吗?     

解决方法

        是的,对于活动连接(例如,加载和运行定义的PHP脚本),将有与活动连接一样多的PHP进程。但是KeepAlive是关于被动连接的,而Nginx非常擅长以极低的资源使用率处理被动的KeepAlive连接,即使是成千上万的连接也是如此。 Apache的问题在于,在通常使用mod_php和mpm_prefork的配置中,即使只是被动的KeepAlive,它也需要每个连接都有一个进程。这意味着即使连接是被动的,大多数Apache服务器实际上确实需要在内存中具有PHP进程,但是如果您以FastCGI的身份运行PHP则不是这样。如果您以FastCGI的身份运行PHP并选择mpm_worker,则Apache也可以处理大量的被动连接,这将为每个连接创建一个更轻量级的线程,但是它仍然不如Nginx。     ,        我对此的回答是看一下node.js,您指定了100K活动连接,只要您拥有正确的硬件,Node.js就应该可以正常处理。 建立连接后,Node不会产生新的进程,套接字被放置在一个排队系统中,但这不是典型的排队系统,先处理一个连接,然后处理下一个连接。 Node.js在处理许多连接方面臭名昭著,那里的HTTP客户端库基于Keep-Alive传输方式,并且非常快速和强大。 我已经相当使用了它,我必须说它非常易于使用,它基于用于Chrome中JavaScript的超快速Google V8引擎,这意味着速度非常快,您应该真正了解一下,您会发现它对于这种事情是可行的。 关于使用Node.js的Plurk的博客文章 Plurk处理100.000+打开的连接     ,        我不明白你的意思。 c10k与Web服务器(apache,nginx等)无关,与PHP相关。 如果您使用nginx,则不必担心