在 RingoJS/Rhino 上托管 Web 应用程序的最佳实践是什么?鉴于它是单线程的,阻塞调用(例如长时间运行的查询/文件上传/Web 服务)将意味着其他所有请求都将挂起。
据我所知,我可以
A.) 为预计长时间阻止的进程(即文件传输、网络 io)和代理打开一个单独的 Ringo 实例。
B.) 打开大约 10-20 个 Ringo 实例,并让 Apache 根据每个进程的请求负载执行某种循环代理。
我只是在寻找有关每种方法的缺陷以及其他人采取的一些方法的信息。当然,这个问题并不局限于 Ringo,因此,任何使用类似环境并“解决”了这个问题的人提供的意见都将不胜感激。
答案1
首先,让我们先正确认识一下前提:RingoJS 是不是单线程。RingoJS 在 JVM 上运行,该 JVM 完全具备多线程处理能力,而 Ringo 毫不犹豫地利用了这一能力!
话虽如此,以下是您的选项的简要概述部署 RingoJS Web 应用程序:
默认情况下,RingoJS 捆绑了码头,一个用 Java 编写的轻量级生产级 Web 服务器。您可以直接使用 Jetty 部署您的应用程序。ringojs.org例如,正在运行。
如果你对在用户面前运行除了最久经沙场的网络服务器之外的任何东西都心存疑虑,那么只需放置一个反向代理前端使用您选择的任何应用程序(Apache、nginx、Varnish 等),后端通过 Jetty 代理运行。这是一种久经考验且灵活的方法,在许多现代服务器端 Web 应用程序框架中使用。
或者,您可以使用您喜欢的Java servlet 容器并使用
JSGIServlet
随 Ringo 一起提供的部署 RingoJS webapps。当您已经在 JEE 环境中操作时,此部署尤其有益。
这些都是可行的方案。选择权在你手中。