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