我有一个VPS在有线电视上,我想在运行LAMP堆栈的服务器上运行一个带有捷径的scala / lift应用程序。 我想使用彗星演员,所以我将使用“长的HTTP黑客”,我不知道这是否重要。
那么我有什么select? 我怎么能做到这一点? 我读有办法做到这一点与mod_rewrite和mod_proxy,但我不知道!
所有的彗星解决scheme都依赖于保持打开的Web服务器之间的连接尽可能长,或者通过客户端发出POST请求,然后延迟发送数据,或者服务器发送GET响应,再次延迟数据。
这两者都有类似的问题的起源,即每个连接消耗一个套接字和内存,并可能是一个线程,除非你使用类似的Jetty continuations。
通过在Jetty之前放置一个像Apache这样的反向代理,就像apache一样,Jetty和客户端之间的每个打开的连接也将消耗一个工作者。 根据您select的apache工作模型(例如mod_prefork或mod_worker_mpm ),您的apache服务器可以支持的最大连接数将受到限制。 mod_prefork大约有几百个,通常受到每个工作进程消耗的物理内存量的限制,通过mod_prefork被限制在几千mod_worker_mpm 。 如果你用php混合mod_worker_mpm你应该研究你的PHP版本的编译选项,因为已知的与php和mod_worker_mpm不兼容。
您还必须注意Apache和Jetty中的超时。 Comet风格的连接要么模拟一个缓慢的POST请求,所以你必须调整Apache对它的宽容度,以及请求体的大小。 如果源服务器没有发送任何东西,则GET样式请求也会被超时。 您必须在反向代理连接的两端,从客户端到Apache以及从Apache到Jetty应用这些超时。
如果我正在部署这样的解决scheme,我会将基于Jetty的Comet服务放在不同的域上,使用负载平衡器代理多个Jetty后端以增加容量和可靠性,或者使用不同的反向代理(如HAProxy)在Apaches中代替,并根据URL将请求引导到各种后端(Apache,Jetty)。