是时候考虑用 Node.js 做点东西了
除非你是多年生活在石器时代,否则你不会没听说过 Node.js,一套用来编写高性能网络服务器的JavaScript平台。如果你跟我一样是一个 .NET 工程师,主要开发 Windows 下的各种应用,那么在听到 Node.js 介绍时你的反应可能是:哦,这不错,然后继续工作。但我想说的是,现在是时候用 Node.js 来开发应用了,它可以简化很多现有工具所作的工作,而且 Node.js 在 Windows 下也已经足够成熟。一个很好的例子就是 iisnode ,可以直接在 IIS 上运行 Node.js 应用。
我们来写一个小例子,我需要编写一个小的 Web 服务,只是简单的在响应之前等待一秒钟。我同时想测试一下 EasyNetQ 的异步 IO 处理。我之前的测试是用 .NET 开发的,下面是我实现的 IHttpHandler 代码:
02 |
using System.Threading; |
03 |
using System.Threading.Tasks; |
06 |
namespace TestHttpHandler |
08 |
public class TimerHandler : IHttpAsyncHandler |
10 |
public void ProcessRequest(HttpContext context) |
12 |
throw new InvalidOperationException( "This handler cannot be called synchronously" ); |
15 |
public bool IsReusable |
20 |
public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback callback, object state) |
22 |
var taskCompletionSouce = new TaskCompletionSource< bool >(state); |
23 |
var task = taskCompletionSouce.Task; |
25 |
var timer = new Timer(timerState => |
27 |
context.Response.Write( "OK" ); |
29 |
taskCompletionSouce.SetResult( true ); |
31 |
timer.Change(1000, Timeout.Infinite); |
36 |
public void EndProcessRequest(IAsyncResult result) |
你看出来了,写一个非堵塞的服务器挺不容易的,你必须仔细处理 TPL 和 APM,这对很多中级 .NET 开发者来说都已经挺难的了。为了运行上述代码,我还必须在 IIS 中设置一个新的 Web 应用,并配置 Web.config 文件,尽管事情不算太多,但已经让我厌倦。
那么用 Node.js 该怎么写上述的服务呢?
01 |
var http = require( 'http' ); |
03 |
http.createServer( function (req, res) { |
04 |
setTimeout( function () { |
05 |
res.writeHead(200, { 'Content-Type' : 'text/plain' }); |
10 |
console.log( 'LongRunningServer is at http://localhost:1338/' ); |
首先,代码明显减少很多,Node 本身是异步的,你无需理解 JavaScript 在处理异步IO方面的任何术语,编写你的服务就是了。尽管我自己是个 Node 的初学者,但我已经可以很快速的编写上面的例子,而且要运行上面的代码也非常的简单,在装好 Node 后只需要打开命令行窗口,执行如下命令即可:
1 |
node LongRunningServer.js |
我还没有想过要放弃 .NET ,但我想,是时候考虑在我的 .NET 应用中采用 Node 来做点事情了。
更多关于Node.js的详细信息,或者下载地址请点这里
评论暂时关闭