iisnode的性能非常慢
我发现iisnode比使用节点命令慢。
使用iisnode有很多好处 ,但性能不好。
我从这里使用configuration文件。
任何想法如何加快?
更新:
我注意到每个页面调用都会重新连接一个新的mongodb连接。
我怎样才能防止它?
这里有一个提示,要将Node.js与IIS7集成到Windows 64位服务器上。 以下提示也解决了iisnode的一些不佳的性能问题,并演示了如何使用Node.js本机扩展。
概要:
创build专用于node.js的新的非托pipe集成32位应用程序池 。 没有其他应用程序应该使用此池。
这适用于64位,但一些node.js本机扩展(如Coconut2D)需要32位,因为SQLite包装。 如果你不使用本地扩展,那么你可以一路走到64位!
-
下载:
iisnode-core-iis7-v0.1.19.0-x64.msi
。 -
使用以下命令安装它:
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
。 -
下载node.js的32位版本(例如
node-v0.12.0-x86.msi
)并将其安装到C:\nodejs
-
创build一个新的应用程序池
名称:node.js pipe理stream水线模式:集成
.NET Framework版本:没有托pipe代码 启用32位应用程序:True 身份:pipe理员
-
假设您的Node.js服务器脚本文件是
server.js
。 转到Web文件夹并创build文件node_start.cmd
。 在命令文件中,您应该将当前path更改为您的wwwroot
并使用server.js
文件启动node.js。 你应该使用双引号的path。C: cd“C:\ HostingSpaces \ ... \ wwwroot” “C:\ nodejs \ node.exe”“C:\ HostingSpaces \ ... \ wwwroot \ server.js”
-
在你的
server.js
确保你有process.env.PORT
var http = require('http'); http.createServer(function(req,res){ 你的代码在这里 })听(process.env.PORT);
-
(可选)如果您正在使用任何node.js本机扩展 (如Coconut2D,SQLite,Cairo或WebKit模块),则必须将
*.node
文件和DLL复制到wwwroot\node_modules
文件夹中。 确保您还设置NTFS安全性以允许执行这些文件或提升应用程序池以模拟pipe理员。 要加载本地扩展,使用require()
,如下所示。var http = require('http'); var Coconut2D = require(“Coconut2D.node”); http.createServer(function(req,res){ 你的代码在这里 })听(process.env.PORT);
-
将下面的
web.config
放在你的web根目录下(例如C:\HostingSpaces\...\wwwroot
)。 这将使IIS7能够处理任何非节点文件,如图像,静态HTML文件和XML文件,并让node.js只处理自己的服务器端脚本 。让IIS处理静态文件并在node.js上并行运行服务器端脚本是非常值得推荐的做法,它可以提高网站的性能。
在这个例子中,我通过使用重写规则来处理带有
iisnode
的.asp
文件。 将*.asp*
replace为您的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=""C:\...\start_node.cmd"" /> <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>