Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / 是时候考虑用 Node.js 做点东西了

除非你是多年生活在石器时代,否则你不会没听说过 Node.js,一套用来编写高性能网络服务器的JavaScript平台。如果你跟我一样是一个 .NET 工程师,主要开发 Windows 下的各种应用,那么在听到 Node.js 介绍时你的反应可能是:哦,这不错,然后继续工作。但我想说的是,现在是时候用 Node.js 来开发应用了,它可以简化很多现有工具所作的工作,而且 Node.js 在 Windows 下也已经足够成熟。一个很好的例子就是 iisnode ,可以直接在 IIS 上运行 Node.js 应用。我们来写一个小例子,我需要编写一个小的 Web 服务,只是简单的在响应之前等待一秒钟。我同时想测试一下 EasyNetQ 的异步 IO 处理。我之前的测试是用 .NET 开发的,下面是我实现的 IHttpHandler 代码: 
01using System;
02using System.Threading;
03using System.Threading.Tasks;
04using System.Web;
05  
06namespace 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 该怎么写上述的服务呢? 
01var http = require("http");
02  
03http.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  
10console.log("LongRunningServer is at http://localhost:1338/");
首先,代码明显减少很多,Node 本身是异步的,你无需理解 JavaScript 在处理异步IO方面的任何术语,编写你的服务就是了。尽管我自己是个 Node 的初学者,但我已经可以很快速的编写上面的例子,而且要运行上面的代码也非常的简单,在装好 Node 后只需要打开命令行窗口,执行如下命令即可:  
1node LongRunningServer.js
我还没有想过要放弃 .NET ,但我想,是时候考虑在我的 .NET 应用中采用 Node 来做点事情了。更多关于Node.js的详细信息,或者下载地址请点这里