我正在决定应用程序的架构,其中“Http KeepAlive”和“long polling”将用于更快的响应。 PHP有什么能解决Tornado为c10k做的问题吗?
我在考虑使用nginx + PHP-FPM。但是,对于1000个活动连接,不会有1000个PHP-FPM进程吗?
然后我认为我们会遇到与Apache有很多常设连接的问题。不是吗?
编辑:我知道如果我只想要HTTP KeepAlive,nginx就足够了。但是,如果我还想要龙卷风支持长时间的民意调查呢? PHP中有类似的内容吗?
答案 0 :(得分:6)
对于活动连接(如,加载和运行已定义的PHP脚本),是的,将有与活动连接一样多的PHP进程。但KeepAlive是关于被动连接,而Nginx非常擅长处理资源使用率非常低的被动KeepAlive连接 - 即使是成千上万的连接也是如此。
Apache的问题在于,在mod_php和mpm_prefork的通常配置中,即使它只是一个被动的KeepAlive,它也需要为每个连接建立一个进程。这意味着大多数Apache服务器实际上做需要在内存中有一个PHP进程,即使连接是被动的,但如果你将PHP作为FastCGI运行则不是这种情况。如果你将PHP作为FastCGI运行并选择mpm_worker,它可以处理大量的被动连接,这将为每个连接创建一个更轻量级的线程,但它仍然不如Nginx。
答案 1 :(得分:2)
我对此的回答是看一下node.js,你指定一个100K活动连接,只要你有正确的硬件,Node.js应该处理好。
节点在建立连接时不会产生新进程,套接字被放置在排队系统中,但它不是典型的排队系统,其中1个连接被处理,然后是下一个连接。
Node.js因处理许多连接而臭名昭着,而且HTTP Client Library基于Keep-Alive传输方式,并且速度非常快,功能强大。
我已经习惯了它,我必须说它非常容易使用,它基于用于Chrome中的JavaScript的超快速Google V8引擎,这意味着它非常快,你应该真的看看这个,你会发现这种事情是可行的。
答案 2 :(得分:0)
我不明白你的意思。 c10k与web服务器(apache,nginx等)无关,而不是PHP。
如果您使用nginx,则不必担心