gpt4 book ai didi

node.js - 如何在 Node.js 中支持多个版本

转载 作者:太空宇宙 更新时间:2023-11-04 01:16:40 24 4
gpt4 key购买 nike

我有一个需要始终保持运行的网站。。当然,我也需要发布新版本。每个页面的生命周期往往都非常长,其中有大量 JavaScript 对服务器进行 AJAX 调用。

我所做的是构建一个新的 WAR 文件并将其放入 Tomcat 的 webapps 目录中,最终看起来像这样:

20110701-7f077d 20110711-aa8db4 20110715-6f4a12 
20110701-7f077d.war 20110711-aa8db4.war 20110715-6f4a12.war live

war 文件以其发布日期及其 GIT 提交 ID 的前几个字符命名,以便我可以跟踪所有内容。 Tomcat自动将war文件解压到同名目录中。 live 直接包含一个给出“live”版本名称的文件。

这样,每个用户都可以继续使用与他加载到浏览器中的前端版本兼容的后端版本。显然,版本升级和恢复是轻松的。

现在,我正在切换到 Node.js,并且我想做同样的事情。我是reliably informed Node.js 不支持在一个实例中独立应用程序。那么,该怎么办?

我唯一能做的就是指定n个槽(其中n是一些小数字,如10或100),每个槽对应一个端口(即槽1是8001等),将Apache放在几个node.js实例前面,每个实例代表一个槽,Apache将使用mod_proxymod_redirect来代理请求,例如'/s lot01' 到端口 8081。“live”将指向当前插槽。

这会很笨拙且容易出错,并且需要一个无用的 Apache 实例,而且最重要的是我无法相信 Node.js 没有一个好的解决方案来解决这个似乎几乎是普遍的问题

最佳答案

您可以使用node-http-proxy并编写一些代码来监视您的“部署目录”是否有新版本,当发现此类版本时,您可以启动相应的脚本并在目录名称下代理它(为了让自己清楚,如果您发现一个新目录“version-11-today”,您的父 Node -http-proxy脚本可以启动新脚本,为其分配一个作为参数传递的端口,然后代理到路径“/version-11-today”下的新应用程序')。

类似的解决方案可以使用 nginx 完成,但在这种情况下,您可以编写一个脚本来监视部署目录并在发现新应用程序时生成一些新的 nginx 配置。

如果您担心可能会耗尽端口,我相信除了 inet 套接字之外,node.js 和 nginx 都可以在 unix 套接字上运行和代理。

上述的一个优点是每个应用程序都在自己的进程中运行,保护其他应用程序免于崩溃并允许单个应用程序重新启动。

如果您不担心某些错误会使您的应用程序崩溃,那么第三种解决方案是拥有一个父脚本,该脚本在同一进程中加载​​所有应用程序版本,并根据它们所在的目录将它们映射到不同的路径下。您可以仍然可以在不停机的情况下重新启动服务器,如本例 http://codegremlins.com/28/Graceful-restart-without-downtime

关于node.js - 如何在 Node.js 中支持多个版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6793733/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com