写点什么

使用 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:477215
用户头像

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

关注

评论

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

这本书押中了2022北京高考作文题!

博文视点Broadview

C#/VB.NET 在Word中设置纯色/渐变/图片背景

在下毛毛雨

C# .net word文档 背景设置

写入速度提升数十倍,TDengine 在拓斯达智能工厂解决方案上的应用

TDengine

数据库 tdengine 时序数据库

Web Service进阶(七)浅谈SOAP Webservice和RESTful Webservice

No Silver Bullet

6月月更 SOAP Webservice RESTful Webservice

GIT 常见问题

甜甜的白桃

git 版本管理 6月月更

数字货币持币生息质押理财dapp系统开发

开发微hkkf5566

JavaScript原型链继承与盗用构造函数继承

大熊G

JavaScript 前端 6月月更

java培训流Stream循环遍历list

@零度

stream JAVA开发

架构实战营|模块3

KDA

#架构实战营

一二三线互联网公司划分标准和榜单

laofo

研发效能 互联网公司 一线大厂 二线互联网 一线互联网

【Python技能树共建】正则表达式

梦想橡皮擦

6月月更

什么是加密?有哪些加密类型和加密算法?逆天原创神作,值得一读!

wljslmz

加密 密码学 加密算法 网络技术 6月月更

电商后台权限设置有哪些规范你知道吗!

CRMEB

帮助中心对企业有用吗?要不要做帮助中心页面?

小炮

系统运维 SIG 直播: libbpf 编译平台 LCC——eBPF从入门到享受 | 第 20 期

OpenAnolis小助手

Linux 运维 内核 ebpf LCC

SAS击球实验室向青少年展示数据与分析的价值

E科讯

我常用的两个翻译神器!程序员必备 | JavaGuide

JavaGuide

spring4.1.8初始化源码学习三部曲之二:setConfigLocations方法

程序员欣宸

Java spring 6月月更

服务管理与通信,基础原理分析

Java 架构 微服务 nacos Feign

网络七层结构是干啥的? 看这篇文章就够了

郑州埃文科技

TCP/IP 网络结构 传输网络

优酷端侧弹幕穿人技术实战之:PixelAI移动端实时人像分割

阿里巴巴文娱技术

音视频 弹幕 人像 移动端 移动端开发

SpringBoot官方支持任务调度框架,轻量级用起来也挺香!

沉默王二

Java springboot

Linux驱动开发_倒车影像项目介绍

DS小龙哥

6月月更

基于 spring-cloud-k8s 跨NS坑续集

Damon

微服务架构 云原生 6月月更

使用 JavaScript 开发AR(增强现实)移动应用的预备知识和环境搭建

汪子熙

JavaScript AR SAP 增强现实 6月月更

在 Flutter 中以编程方式截取任何 Widget

坚果

6月月更

如何搭建短视频app源码,实现短视频内容的播放优化

开源直播系统源码

APP开发 短视频源码

面试突击55:delete、drop、truncate有什么区别?

王磊

Java 面试

C#入门系列(八) -- 方法定义

陈言必行

C# 6月月更

【LeetCode】爱吃香蕉的珂珂Java题解

Albert

LeetCode 6月月更

聚焦中国算力大会 | 浪潮集团肖雪: 数字化转型新场景激发算力需求

云计算

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