iisnode性能非常慢

3
我发现相比使用node命令,iisnode较慢。
使用iisnode有很多好处,但性能不佳。
我正在使用这里的配置文件。
有任何加速的想法吗?

更新:

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

我该如何防止这种情况发生?

1个回答

5
以下是与Windows 64位服务器上的IIS7集成Node.js的提示。以下提示还解决了iisnode的一些性能问题,并演示了如何使用Node.js本地扩展。
摘要:
创建一个新的Unmanaged Integrated 32位应用程序池专门用于node.js。没有其他应用程序应该使用此池。
这适用于64位,但某些Node.js本地扩展(例如Coconut2D)需要32位,因为它们包装了SQLite。如果您不使用本地扩展,则可以完全使用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) {
        ... your code here ...
    }).listen(process.env.PORT);
    
  7. (可选)如果您使用任何node.js 本机扩展,例如Coconut2D、SQLite、Cairo或WebKit模块,则必须将*.node文件和DLL复制到wwwroot\node_modules文件夹中。请确保您还设置了NTFS安全性以允许执行这些文件,或提升应用程序池以模拟管理员。要加载本机扩展,请使用下面所示的require()

    var http = require('http');
    var Coconut2D = require("Coconut2D.node");
    http.createServer(function (req, res) {
        ... your code here ...
    }).listen(process.env.PORT);
    
  8. 将以下web.config放置在您的Web根目录中(例如C:\HostingSpaces\...\wwwroot)。这将启用IIS7处理任何非Node文件,例如图像、静态HTML文件和XML文件,并让node.js仅处理其自己的服务器端脚本

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

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

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="iisnode" path="node.js" verb="*" modules="iisnode" />
    </handlers> 
    <iisnode nodeProcessCommandLine="&quot;C:\...\start_node.cmd&quot;" />
    <defaultDocument>
      <files>
        <remove value="index.php" />
        <remove value="default.aspx" />
        <remove value="iisstart.htm" />
        <remove value="index.html" />
        <remove value="index.htm" />
        <remove value="Default.htm" />
      </files>
    </defaultDocument>
    <httpProtocol>
      <customHeaders>
        <remove name="X-Powered-By" />
      </customHeaders>
    </httpProtocol>
    <rewrite>
      <rules>
        <rule name="CavoBoutique" patternSyntax="Wildcard">
          <match url="*.asp*" />
          <action type="Rewrite" url="node.js" logRewrittenUrl="true" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接