4

在单个 Azure Web 角色(教程)上托管多个 ASP.NET 项目非常容易,但是否可以使用单个 Web 角色同时托管 ASP.NET 和 node.js 项目?

4

1 回答 1

4

是的,这是可能的,使用 2 种不同的解决方案:

  1. 您可以有一个后台启动任务,它使用所需的参数运行 node.exe。对于您的 ASP.NET 应用程序,没有任何变化,您唯一需要做的就是在该项目中包含节点文件并在启动 node.exe 时引用该目录

  2. 使用iisnode。这允许您通过 IIS HttpModule 运行您的节点代码,它带来了一些额外的好功能(引用 Tomasz Janczuk):

    • 流程管理。iisnode 模块负责 node.exe 进程的生命周期管理,从而使提高整体可靠性变得简单。您不必实施基础设施来启动、停止和监控流程。
    • 多核服务器上的可扩展性。由于 node.exe 是一个单线程进程,它只能扩展到一个 CPU 内核。iisnode 模块允许为每个应用程序创建多个 node.exe 进程并平衡它们之间的 HTTP 流量,因此可以充分利用服务器的 CPU 容量,而无需应用程序开发人员提供额外的基础架构代码。
    • 自动更新。iisnode 模块确保无论何时更新node.js 应用程序(即脚本文件已更改),都会回收node.exe 进程。允许正在进行的请求使用旧版本的应用程序优雅地完成执行,而所有新请求都被分派到新版本的应用程序。
    • 通过 HTTP 访问日志。iisnode 模块提供通过HTTP 访问node.exe 进程的输出(例如由console.log 调用生成)。该工具是帮助您调试部署到远程服务器的 node.js 应用程序的关键。
    • 与其他内容类型并排。iisnode 模块以允许单个网站包含多种内容类型的方式与 IIS 集成。例如,单个站点可以包含 node.js 应用程序、静态 HTML 和 JavaScript 文件、PHP 应用程序和 ASP.NET 应用程序。这使得为​​手头的工作以及现有应用程序的渐进式迁移选择最佳工具成为可能。
    • 对 node.js 应用程序代码的最小更改。iisnode 模块能够以极少的更改托管现有的 HTTP node.js 应用程序。通常,只需将列出的 HTTP 服务器地址更改为 iisnode 模块通过 process.env.PORT 环境变量提供的地址。
    • 综合管理经验。iisnode模块与IIS配置系统完全集成,使用与其他IIS组件相同的工具和机制进行配置和维护。除了 iisnode 模块特有的好处之外,在 IIS 中托管 node.js 应用程序还允许开发人员从一系列 IIS 功能中受益,其中包括:
      • 端口共享(通过端口 80 托管多个 HTTP 应用程序)
      • 安全性(HTTPS、身份验证和授权)
      • 网址重写
      • 压缩
      • 缓存
      • 日志记录
于 2012-10-23T06:31:34.620 回答