除非你是多年生活在石器時代,否則你不會沒聽說過 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的詳細信息,或者下載地址請點這裡