![Apache 和 Jetty](https://linux22.com/image/486088/Apache%20%E5%92%8C%20Jetty.png)
我在 wiredtree 中有一个 VPS,我想在运行 LAMP 堆栈的服务器中使用 jeety 运行 scala/lift 应用程序。我想使用 comet actors,所以我将使用“long http hack”,但我不知道这是否重要。
那么我有什么选择?我该如何实现这一点?我读到有使用 mod_rewrite 和 mod_proxy 的方法,但我不知道!
答案1
所有的 Comet 解决方案都依赖于尽可能长时间地保持 Web 服务器之间的连接打开,要么由客户端发出请求POST
然后延迟发送数据,要么由服务器发送响应GET
,再次延迟数据。
这两者都有类似的问题,即每个连接消耗一个套接字和内存,甚至可能消耗一个线程,除非您使用类似 Jetty 延续之类的东西。
通过在 Jetty 前面放置像 Apache 这样的反向代理,与 apache 一样,Jetty 和客户端之间的每个打开连接也将使用一个工作程序。根据您选择的 apache 工作模型(例如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)。