写点什么

使用 IIS 托管运行 Node.js 应用程序

  • 2011-08-29
  • 本文字数:1114 字

    阅读完需:约 4 分钟

Node.js 是目前十分流行,发展势头迅猛的服务器程序开发技术。Node.js 使用 JavaScript 语言,运行在 V8 引擎之上,之前一直有 *nix 下的版本,而在微软的支持下,也逐渐提供了对 Windows 的支持。而由 Tomasz Janczuk 开发的 iisnode 项目则是一个 IIS 原生模块,可以将 Node.js 程序托管在 IIS 上,由 IIS 进行 Node.js 进程管理。

Tomaz Janczuk在博客上介绍了 iisnode 项目,并阐述了使用 IIS 托管 Node.js 应用程序,相对于直接使用 node.exe 的优势:

  • 进程管理:iisnode 模块负责管理 node.exe 进程的生命周期,这提高了整体的可靠性,无须自行实现启动,停止或是进程监控等基础架构。
  • 利用多核服务器:node.exe 是单线程的程序,只能使用一个 CPU 核心。而 iisnode 模块会为每个应用程序创建多个 node.exe 进程,并将 HTTP 流量平衡至这些进程上。这样开发人员无须自行实施这方面的基础架构便可以充分利用多核 CPU 的能力。
  • 自动更新:iisnode 模块会在 Node.js 应用程序更新时(例如修改了脚本文件)自动回收 node.exe 进程。已有的请求会等待旧有代码执行完毕后,并自动切换至新版本的代码。
  • 使用 HTTP 访问日志:iisnode 模块提供了一个使用 HTTP 形式访问 Node.js 日志(例如使用 console.log 输出的信息)的机制。这十分有利于调试远程部署的 Node.js 程序。
  • 与不同类型的请求一起工作:利用 iisnode 模块与 IIS 集成之后,就可以在一个网站中使用 Node.js 处理部分请求,而把另外一些类型的请求(例如静态文件)交给 IIS 本身,甚至 ASP.NET 程序来使用。这让开发人员可以方便地选择最合适的方式来处理不同资源,或是逐步迁移应用程序。
  • 几乎无须改变 Node.js 程序代码:使用 iisnode 模块托管 Node.js 程序时几乎无须修改程序代码。一般来说,只需要把监听地址修改为 iisnode 提供的 process.env.PORT 环境变量即可。
  • 集成管理体验:iisnode 模块与 IIS 配置系统完全集成,可以使用与其他 IIS 组件相同的方式或是工具来配置和维护 Node.js 程序。

Tomaz 同时提到,使用 IIS 来托管 Node.js 程序意味着可以利用各种 IIS 功能,例如:

  • 共享端口(让多个 HTTP 应用程序同时使用 80 端口)
  • 安全特性(HTTPS,认证与授权等等)
  • URL 重写
  • 压缩
  • 缓存
  • 日志

Tomaz 同时也在博客中提供了较为详细地 iisnode 使用说明。著名微软技术博客作家 Scott Hanselman也在文章里介绍了 iisnode 项目,同时以 ASP.NET 程序员的角度介绍了 Node.js 项目,以及步步为营的 iisnode 使用向导,并使用 WCAT(Web Capacity Analysis Tool)对 iisnode 与 Node.js 应用程序进行性能分析。

值得一提的是,Scott 也在文章里提到:无论是 IIS 团队,Windows 团队还是 Azure 团队,都希望一切都能运行良好——其中自然也包括 Node.js。

2011-08-29 11:477202
用户头像

发布了 157 篇内容, 共 62.4 次阅读, 收获喜欢 6 次。

关注

评论

发布
暂无评论
发现更多内容

Java Jackson 中的 JsonNode 和 ObjectNode

HoneyMoose

ReactNative进阶(四):ReactNative 原理剖析之JS 层渲染 diff 算法

No Silver Bullet

React Native 渲染性能 1月月更

Kafka往事——揭露Kafka推出Kafka Streams背后原因

Kafka中文社区

阿里云万郁香:多样付费选择构筑成本最优的弹性体验

阿里云弹性计算

阿里云 年度峰会 付费方式

【LeetCode】 替换所有的问号Java题解

Albert

算法 LeetCode 1月月更

error: ‘slots_reference’ was not declared in this scope

Ayosh

OpenCV

使用LNMP环境部署码云测试项目

咿呀呀

lnmp

Java Jackson 中的 mapper

HoneyMoose

设计模式【8】-- 手工耿教我写装饰器模式

秦怀杂货店

Java 设计模式 装饰器

《LeetCode刷题》数组与队列

IT蜗壳-Tango

IT蜗壳教学 1月月更

AWS 上传的 S3 文件重新载入的时候简体中文显示乱码

HoneyMoose

面试突击13:方法优先调用可选参数还是固定参数?

王磊

java面试 2022

双碳绿色风中,乘势而起了哪些新能源?

脑极体

教你实现一个 iOS 重签名工具

37手游iOS技术运营团队

ios xcode

倒计时1天 | 超百位技术大咖齐聚开发者大会,与全球开发者一起“数聚未来”

OceanBase 数据库

OceanBase 开源 开发者大会

开源实践 | 携程在 OceanBase 的探索与实践

OceanBase 数据库

OceanBase 开源 客户案例 携程

一篇从购买服务器到部署博客代码的详细教程

冴羽

nginx 前端 后端 博客 博客搭建

盘点 2021| 不忘初心,未来之路,与君共勉

法医

前端 盘点 2021

Apache APISIX 结合 Authing 实现集中式身份认证管理

API7.ai 技术团队

api 网关 Apache APISIX Authing 身份验证

明道云虹桥演示中心,欢迎进店!

明道云

一个cpp协程库的前世今生(十一)等待与返回值

SkyFire

c++ cocpp

关于ant design pro的权限方案设计

袋鼠云数栈

大数据

【LeetCode】奇偶树Java题解

Albert

算法 LeetCode 1月月更

Kubernetes生态,从繁荣走向碎片化

巨子嘉

容器 云原生

Spring Boot工程中如何优雅地处理异常

sean77

spring 整洁代码

一键抠除路人甲,昇腾CANN带你识破神秘的“AI消除术”

华为云开发者联盟

CANN 昇腾 图像消除 智能实例分割 CRA算法

数据分析人员需要掌握SQL到什么程度?3个常考题目刷一刷

博文视点Broadview

服务发现与配置管理高可用最佳实践

阿里巴巴云原生

阿里云 微服务 高可用 云原生 MSE

杜甫草堂

wood

300天创作

kubelet 的主动驱逐POD

Geek_f24c45

Kubernetes kubelet

netty系列之:真正的平等–UDT中的Rendezvous

程序那些事

Java Netty 程序那些事 1月月更

使用IIS托管运行Node.js应用程序_.NET_赵劼_InfoQ精选文章