歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

是時候考慮用 Node.js 做點東西了

除非你是多年生活在石器時代,否則你不會沒聽說過 Node.js,一套用來編寫高性能網絡服務器的JavaScript平台。如果你跟我一樣是一個 .NET 工程師,主要開發 Windows 下的各種應用,那麼在聽到 Node.js 介紹時你的反應可能是:哦,這不錯,然後繼續工作。但我想說的是,現在是時候用 Node.js 來開發應用了,它可以簡化很多現有工具所作的工作,而且 Node.js 在 Windows 下也已經足夠成熟。一個很好的例子就是 iisnode ,可以直接在 IIS 上運行 Node.js 應用。

我們來寫一個小例子,我需要編寫一個小的 Web 服務,只是簡單的在響應之前等待一秒鐘。我同時想測試一下 EasyNetQ 的異步 IO 處理。我之前的測試是用 .NET 開發的,下面是我實現的 IHttpHandler 代碼:

  01 using System; 02 using System.Threading; 03 using System.Threading.Tasks; 04 using System.Web; 05    06 namespace TestHttpHandler 07 { 08     public class TimerHandler : IHttpAsyncHandler 09     { 10         public void ProcessRequest(HttpContext context) 11         { 12             throw new InvalidOperationException("This handler cannot be called synchronously"); 13         } 14    15         public bool IsReusable 16         { 17             get { return false; } 18         } 19    20         public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback callback, object state) 21         { 22             var taskCompletionSouce = new TaskCompletionSource<bool>(state); 23             var task = taskCompletionSouce.Task; 24    25             var timer = new Timer(timerState => 26             { 27                 context.Response.Write("OK"); 28                 callback(task); 29                 taskCompletionSouce.SetResult(true); 30             }); 31             timer.Change(1000, Timeout.Infinite); 32    33             return task; 34         } 35    36         public void EndProcessRequest(IAsyncResult result) 37         { 38             // nothing to do 39         } 40     } 41 }

你看出來了,寫一個非堵塞的服務器挺不容易的,你必須仔細處理 TPL 和 APM,這對很多中級 .NET 開發者來說都已經挺難的了。為了運行上述代碼,我還必須在 IIS 中設置一個新的 Web 應用,並配置 Web.config 文件,盡管事情不算太多,但已經讓我厭倦。

那麼用 Node.js 該怎麼寫上述的服務呢?

  01 var http = require('http'); 02    03 http.createServer(function (req, res) { 04     setTimeout(function () { 05         res.writeHead(200, { 'Content-Type': 'text/plain' }); 06         res.end('OK'); 07     }, 1000); 08 }).listen(1338); 09    10 console.log('LongRunningServer is at http://localhost:1338/');首先,代碼明顯減少很多,Node 本身是異步的,你無需理解 JavaScript 在處理異步IO方面的任何術語,編寫你的服務就是了。盡管我自己是個 Node 的初學者,但我已經可以很快速的編寫上面的例子,而且要運行上面的代碼也非常的簡單,在裝好 Node 後只需要打開命令行窗口,執行如下命令即可:   1 node LongRunningServer.js

我還沒有想過要放棄 .NET ,但我想,是時候考慮在我的 .NET 應用中采用 Node 來做點事情了。

更多關於Node.js的詳細信息,或者下載地址請點這裡

Copyright © Linux教程網 All Rights Reserved