歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 是時候考慮用 Node.js 做點東西了

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

日期:2017/3/1 10:22:41   编辑:Linux編程

除非你是多年生活在石器時代,否則你不會沒聽說過 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