讓nodejs在iis上運行


node在IIS上運行的好處:

Tomasz的回答是我見過最棒的:

使用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.exe進程中的輸出。(比如,由console.log調用生成的輸出)。這個功能是幫你調試在遠程服務器上的node.js應用程序問題的關鍵。

· 與其他內容類型相連。 Iisnode模塊與IIS相融,讓一個單一的web頁面能夠涵蓋許多內容類型。比如,一個單一的頁面可以包含一個node.js應用,統計HTMLJavaScript文件,PHP應用和ASP.NET應用。這就讓用戶能隨意挑選最適合的工具,並未已有應用完成遷移。

 

 

· 只需改變少部分node.js應用代碼。 Iisnode模塊支持最少的改動來托管現有HTTP node.js應用。你只需通過process.env.PORT環境變量把HTTP服務器列出的地址變為iisnode提供的地址就可以了。

融合管理體驗。 issnode模塊完全集成IIS配置系統,並使用相同的工具和機制,類似於IIS其它組件的配置和維護。

 

 

除了有利於iisnode模塊中特定的點,在IIS中托管node.js應用還能讓開發者從一系列IIS功能中獲益匪淺,包括:

    • 端口共享(通過80多個端口托管多個HTTP應用)
    • 安全(HTTPS,身份驗證和授權)
    • URL 重寫
    • 壓縮
    • 緩存
    • 日志

都非常有說服力,但在我看來,最有趣的要數一體化了。Iisnode模塊是一個合理的IIS模塊,就像ASP.NET和PHP一樣。這就意味着你可以在一個單一的網站上看到多種內容。正如上述:

比如,一個單一的頁站可以包含一個node.js應用,統計HTMLJavaScript文件,PHP應用和ASP.NET應用。

一些同仁們一聽到我說,你可以在同一個AppPool中使用ASP.NET WebForms和ASP.NET MVC就好像“混血兒”一樣,就會瘋狂起來。親愛的讀者,大家都沒有意識到IIS的強大和靈活性。當你插入像node一樣的新東西,但還是按舊方法來操作時,它仍然會延續所有包含的優點。

好吧,你說服我了,那我要怎么在Windows上運行node.js呢?

我假定你運行的是IIS7.

· 去 下載node.exe,放在 c:\node

· 去 下載iisnode.

· 解壓iisnode壓縮包,解壓到\inetpub\iisnode

· (只是我的建議,未必是最好的位置)

· 以管理員身份在命令行中運行install.bat。

Install.bat將會:

· 從你安裝的IIS中取消注冊已有的“iisnode”全局模塊,如果你已經注冊過的話。

· 在你的安裝的IIS中注冊iisnode為本地模塊

· 安裝“iisnode”模塊配置文件

· 從applicationHost.config中的system.webServer組移除現有“iisnode”部分

· 在applicationHost.config中的system.webServer組添加新的“iisnode”部分

· 如果有iisnode web應用,直接刪除

· 為IIS添加新的iisnode站點

沒有保證!要小心,你是在邊緣行走。記住,你只是在偶然看到的博客上看到這篇文章。

警告:我搞不清楚正確的AppPool和文件系統權限,所以我直接給了我本地AppPool“SYSTEM”的權限。這很糟糕,都是我的錯。我在iisnode GitHub上寫下了問題,等他們有回復時我會想辦法修復然后更新的。

我為node做了個新的AppPool,給了它SYSTEM的訪問權限,然后將Node Site分配給這個新的AppPool。你的站點看上去就是這樣的:

Node Site in IIS7

如果你在IIS7的這個頁面上點擊這個模塊,你將會看到iisnode是本地模塊:

Hey, it's iisnode as a native module, just like I said. Crazy.

現在,你可以點擊http://localhost/node/helloworld/hello.js 然后得到回饋:

Hello, world! [helloworld sample]

內容很簡單:

 1: var http = require('http');
 2: 
 3: http.createServer(function (req, res) {
 4: res.writeHead(200, {'Content-Type': 'text/plain'});
 5: res.end('Hello, world! [helloworld sample]');
 6: }).listen(process.env.PORT);

很棒吧。

玩玩WCAT(Web容量分析工具)和node。

免責聲明:先說清楚,這只是玩玩。不過為了展示它的確能用,而且運行的速度很快。我做的不是基准內容,我也沒說過“這個運行起來比別的工具好”。記住,他們最近剛剛起步,把node遷移到Windows,Tomasz和他的朋友們最近才開始做。所以不要期望太高。話說回來,他們現在做成的內容已經很嘆為觀止了。

我真是有些激動了。我是說把一個新的東西安裝到另一個新的東西上,然后只運行一次就成功了。我做完一系列基礎工作之后,我想做一些簡單的壓力測試看看大家做了些什么。

首先,我安裝了WCAT,一款IIS團隊開發的免費Web容量分析工具。

1. WCAT 6.3 x86

2. WCAT 6.3 x64

警告:這是一個僅支持命令行的工具,運行起來真的有點小家子氣。有點混亂,設置安裝也花了我點時間。以下是我安裝的步驟。都是從管理者權限的命令提示符中執行的。注意我是在同一台機器上做的,記住這是GOM 。

1. cscript //H:Cscript

2. wcat.wsf –terminate –update –clients localhost

3. 然后我建了一個文件夾命名為\nodetests,然后把這三個文件放了進去。

wcat.bat

pushd C:\Users\Scott\Desktop\nodetests 
"c:\program files\wcat\wcat.wsf" -terminate -run -clients localhost -f settings.ubr -t nodescenario.ubr -s localhost -singleip -o C:\Users\Scott\Desktop\nodetests 
pause

nodescenario.ubr (你可以隨意命名)

這也很簡單。它會被4個示例程序一一調用。

 1: scenario
 2: {
 3: name = "node_fun";
 4: 
 5: warmup = 30;
 6: duration = 90;
 7: cooldown = 30;
 8: 
 9: default 
 10: 
 11: setheader
 12: {
 13: name = "Connection";
 14: value = "keep-alive";
 15: }
 16: setheader
 17: {
 18: name = "Host";
 19: value = server();
 20: }
 21: version = HTTP11;
 22: statuscode = 200;
 23: close = ka;
 24: }
 25: 
 26: transaction
 27: {
 28: id = "foo";
 29: weight = 1000;
 30: request
 31: {
 32: url = "/node/logging/hello.js";
 33: }
 34: }
 35: transaction
 36: {
 37: id = "bar";
 38: weight = 2000;
 39: request
 40: {
 41: url = "/node/helloworld/hello.js";
 42: }
 43: }
 44: transaction
 45: {
 46: id = "baz";
 47: weight = 2000;
 48: request
 49: {
 50: url = "/node/defaultdocument/";
 51: }
 52: } 
 53: transaction
 54: {
 55: id = "bat";
 56: weight = 2000;
 57: request
 58: {
 59: url = "/node/configuration/hello.js";
 60: }
 61: } 
 62: }

settings.ubr

我從別的例子中復制過來並去掉注釋然后進行了一點修改(在測試過程中修改的):

 1: server = "hexpower7";
 2: clients = 1;
 3: virtualclients = 8;

現在,運行以測試

然后,我以管理者身份運行wcat.bat。你會看到node.exe開始行動。

(記得他們是以SYSTEM運行的,因為我搞不清正確的權限,是我的錯。我總有一天會搞清楚的。)

Lots of little node processes

這是WCAT工具的控制台輸出。我可以連續在一秒內做一萬個HelloWorld,這最終會是上百萬個正常請求並且在90秒內得到回應。那可是很多個HelloWorld。

記住Hanselman的運行法則。

“什么都不做,那就有無限的可能”—我

當然,這些都是在一台配置不錯的機器的本地操作。這不過是個HelloWorld(外加一些日志),所以沒有太多的測試node和IIS,不過倒是測試了整個系統,IIS,iisnode和node本身的合作互動。

另:ASP.NET IhttpHandler在同台機器上做同樣的事情,結果是在一秒內有22500個請求,所以node和iisnode還有上升空間,這是個好消息。

以下是node/iisnode的結果:

Pushing a million transactions in 90 seconds

還有很多東西我可以配置在兩個站點上,客戶數量,虛擬客戶,還有iisnode特定設置(都在web.config中管理):

 1: <configuration>
 2: <system.webServer>
 3: <handlers>
 4: <add name="iisnode" path="hello.js" verb="*" modules="iisnode" />
 5: </handlers>
 6: <iisnode 
 7: nodeProcessCommandLine="%systemdrive%\node\node.exe"
 8: maxProcessCountPerApplication="4"
 9: maxConcurrentRequestsPerProcess="1024"
 10: maxPendingRequestsPerApplication="1024"
 11: maxNamedPipeConnectionRetry="3"
 12: namedPipeConnectionRetryDelay="2000" 
 13: asyncCompletionThreadCount="4"
 14: initialRequestBufferSize="4096"
 15: maxRequestBufferSize="65536"
 16: uncFileChangesPollingInterval="5000"
 17: gracefulShutdownTimeout="60000"
 18: loggingEnabled="true"
 19: logDirectoryNameSuffix="logs"
 20: maxLogFileSizeInKB="128"
 21: appendToExistingLog="false"
 22: />
 23: </system.webServer>
 24: </configuration>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM