在单个Azure Web角色中混合node.js和ASP.NET项目?

时间:2012-10-22 15:35:56

标签: asp.net node.js azure azure-web-roles

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

1 个答案:

答案 0 :(得分: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调用生成)的访问。此工具是帮助您调试部署到远程服务器的nod​​e.js应用程序的关键。
    • 与其他内容类型并排。 iisnode模块以允许单个网站包含各种内容类型的方式与IIS集成。例如,单个站点可以包含node.js应用程序,静态HTML和JavaScript文件,PHP应用程序和ASP.NET应用程序。这使得能够为现有工作选择最佳工具以及现有应用程序的渐进式迁移。
    • 对node.js应用程序代码的最小更改。 iisnode模块可以使用极少的更改来托管现有的HTTP node.js应用程序。通常,所需要的只是通过process.env.PORT环境变量将HTTP服务器的列出地址更改为iisnode模块提供的地址。
    • 集成管理经验。 iisnode模块与IIS配置系统完全集成,并使用与其他IIS组件相同的工具和机制进行配置和维护。 除了特定于iisnode模块的优点之外,在IIS中托管node.js应用程序还允许开发人员从一系列IIS功能中受益,其中包括:
      • 端口共享(通过端口80托管多个HTTP应用程序)
      • 安全性(HTTPS,身份验证和授权)
      • 网址重写
      • 压缩
      • 缓存
      • 登录