RingoJS,Threading,Blocking,Load

有关在RingoJS / Rhino上托pipeWeb应用程序的最佳做法是什么? 看起来它是单线程的,阻塞诸如长时间运行的查询/file upload/networking服务之类的调用将意味着每一个请求都会挂起。

据我所知,我可以

A.)打开一个单独的Ringo实例来处理我想要阻塞很久的进程(即文件传输,networkingIO)和代理。

B.)打开大约10-20个Ringo实例,并根据每个进程的请求负载,使Apache执行某种循环代理。

我只是在寻找有关每个人的陷阱和其他人采取的一些方法的信息。 当然,这个问题不仅限于Ringo,所以任何来自使用类似环境的人们的input已经“解决”了这个问题。

首先,让我们得到正确的前提: RingoJS 不是单线程的 。 RingoJS在JVM上运行,完全能够支持multithreading,而Ringo则毫不犹豫地利用这一能力!

这就是说,以下是部署RingoJS webapps的选项的简要说明

  • 默认情况下,RingoJS与Jetty捆绑在一起, Jetty是一种用Java编写的生产型轻量级Web服务器。 您可以直接使用Jetty部署您的应用程序。 例如,这就是ringojs.org的运行方式。

  • 如果你有一个内在的不信任,除了在面向用户的位置上最强化的Web服务器运行,只需在你的select(Apache,nginx,Varnish等)前面放置一个反向代理 ,并通过代理运行到Jetty背部。 这是许多当代服务器端Web应用程序框架中经过时间考验和灵活的方法。

  • 或者,您可以使用您首选的Java servlet容器,并使用Ringo提供的JSGIServlet部署RingoJS JSGIServlet应用程序。 当您已经在JEE环境中运行时,此部署特别有用。

所有这些都是可行的可能性。 这是你的select。