iisnode 性能很慢

Alv*_*vin 3 node.js iisnode

我发现 iisnode 比使用 node 命令慢。

使用iisnode好处很多,但是性能不好。

我正在使用这里的配置文件。

知道如何加快速度吗?


更新:

我注意到每个页面调用都会重新连接一个新的 mongodb 连接。

我该如何预防?

Eli*_*ias 5

这是在 Windows 64 位服务器上将 Node.js 与 IIS7 集成的提示。以下提示还解决了 iisnode 的一些性能不佳问题,并演示了如何使用 Node.js Native Extensions。

概括:

创建一个 专用于 node.js的新的非托管集成 32 位应用程序池。其他应用程序不应使用此池。

这也适用于 64 位,但由于 SQLite 包装,一些 node.js 本机扩展(如 Coconut2D)需要 32 位。如果您不使用本机扩展,那么您可以一直使用 64 位!

  1. 下载:iisnode-core-iis7-v0.1.19.0-x64.msi

  2. 使用以下命令安装它:msiexec /i iisnode-core-iis7-v0.1.19.0-x64.msi WOW=1. 这将在 64 位机器上安装 32 位版本的 iisnode。请注意,iisnode.dll将安装在C:\Program Files (x86)\iisnode\iisnode.dll.

  3. 下载 32 位版本的 node.js(例如node-v0.12.0-x86.msi)并将其安装在C:\nodejs

  4. 创建新的应用程序池

    名称:node.js
    管理管道模式:集成 
    
    .NET Framework 版本:无托管代码
    启用 32 位应用程序:True
    身份:管理员
    
  5. 假设您的Node.js 服务器脚本文件是server.js. 转到 web 文件夹并创建文件node_start.cmd。在命令文件中,您应该更改当前路径wwwroot并使用您的server.js文件启动 node.js。您应该使用双引号路径。

    C:
    cd "C:\HostingSpaces\...\wwwroot"
    "C:\nodejs\node.exe" "C:\HostingSpaces\...\wwwroot\server.js"
    
  6. 在你server.js确保你有process.env.PORT

    var http = require('http');
    http.createServer(function (req, res) {
        ......你的代码在这里......
    }).listen(process.env.PORT);
    
  7. (可选)如果您使用任何 node.js 本机扩展,例如 Coconut2D、SQLite、Cairo 或 WebKit 模块,您必须复制*.node文件wwwroot\node_modules夹中的文件和 DLL 。确保您还设置了 NTFS 安全性以允许执行这些文件或提升应用程序池以模拟管理员。要加载本机扩展,请使用require()如下所示。

    var http = require('http');
    var Coconut2D = require("Coconut2D.node");
    http.createServer(function (req, res) {
        ......你的代码在这里......
    }).listen(process.env.PORT);
    
  8. 将以下内容web.config放在您的 Web 根目录中(例如C:\HostingSpaces\...\wwwroot)。这将使 IIS7 能够处理任何非节点文件,例如图像、静态 html 文件和 xml 文件,并让 node.js 只处理它自己的服务器端脚本

    让 IIS 处理静态文件并在 node.js 上并排运行服务器端脚本是一种强烈推荐的做法,它确实可以提高您网站的性能。

    在这个例子中,我通过使用重写规则来处理.asp文件iisnode。替换*.asp*为您的 node.js 服务器脚本扩展(例如*.njs*)。请注意,通配符模式中没有根斜杠;这很重要,也是*模式末尾的最后一个。

Name: node.js
Managed pipeline mode: Integrated