23
回答
是时候考虑用 Node.js 做点东西了
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

除非你是多年生活在石器时代,否则你不会没听说过 Node.js,一套用来编写高性能网络服务器的JavaScript平台。如果你跟我一样是一个 .NET 工程师,主要开发 Windows 下的各种应用,那么在听到 Node.js 介绍时你的反应可能是:哦,这不错,然后继续工作。但我想说的是,现在是时候用 Node.js 来开发应用了,它可以简化很多现有工具所作的工作,而且 Node.js 在 Windows 下也已经足够成熟。一个很好的例子就是 iisnode ,可以直接在 IIS 上运行 Node.js 应用。

我们来写一个小例子,我需要编写一个小的 Web 服务,只是简单的在响应之前等待一秒钟。我同时想测试一下 EasyNetQ 的异步 IO 处理。我之前的测试是用 .NET 开发的,下面是我实现的 IHttpHandler 代码:

using System;
using System.Threading;
using System.Threading.Tasks;
using System.Web;

namespace TestHttpHandler
{
    public class TimerHandler : IHttpAsyncHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            throw new InvalidOperationException("This handler cannot be called synchronously");
        }

        public bool IsReusable
        {
            get { return false; }
        }

        public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback callback, object state)
        {
            var taskCompletionSouce = new TaskCompletionSource<bool>(state);
            var task = taskCompletionSouce.Task;

            var timer = new Timer(timerState =>
            {
                context.Response.Write("OK");
                callback(task);
                taskCompletionSouce.SetResult(true);
            });
            timer.Change(1000, Timeout.Infinite);

            return task;
        }

        public void EndProcessRequest(IAsyncResult result)
        {
            // nothing to do
        }
    }
}

你看出来了,写一个非堵塞的服务器挺不容易的,你必须仔细处理 TPL 和 APM,这对很多中级 .NET 开发者来说都已经挺难的了。为了运行上述代码,我还必须在 IIS 中设置一个新的 Web 应用,并配置 Web.config 文件,尽管事情不算太多,但已经让我厌倦。

那么用 Node.js 该怎么写上述的服务呢?

var http = require('http');

http.createServer(function (req, res) {
    setTimeout(function () {
        res.writeHead(200, { 'Content-Type': 'text/plain' });
        res.end('OK');
    }, 1000);
}).listen(1338);

console.log('LongRunningServer is at http://localhost:1338/');
首先,代码明显减少很多,Node 本身是异步的,你无需理解 JavaScript 在处理异步IO方面的任何术语,编写你的服务就是了。尽管我自己是个 Node 的初学者,但我已经可以很快速的编写上面的例子,而且要运行上面的代码也非常的简单,在装好 Node 后只需要打开命令行窗口,执行如下命令即可:
node LongRunningServer.js

我还没有想过要放弃 .NET ,但我想,是时候考虑在我的 .NET 应用中采用 Node 来做点事情了。

英文原文OSCHINA原创翻译

举报
红薯
发帖于6年前 23回/11K+阅
共有23个评论 最后回答: 4年前

引用来自“leo108”的答案

愿景总是很美好啊,可是node.js连文件路由都得自己写,这个太蛋疼了
有框架的expressjs,而且写一个路由也不难的,尤其是js下面
--- 共有 1 条评论 ---
leo108好吧,对node框架了解不多 6年前 回复
尽管对JavaScript有点认识,但目前我没打算使用Node.js, 等其成熟并且准备商业化时再用也不迟...

不知道有多少人真正在用node.js, 貌似代码必须写得非常健壮才行,一个异常导致整个服务瘫掉。需要做很多的其它工作才能让服务跑得省心些, Javascript程序员可不是这样的人。

var http = require('http');

http.createServer(function (req, res) {
    setTimeout(function () {
        res.writeHead(200, { 'Content-Type': 'text/plain' });
        res.end('Hello,World');
	// raise an exception will make the server down
	JSON.parse('\\');
    }, 1000);
}).listen(1338);

console.log('Server is running at http://localhost:1338/');

 

--- 共有 1 条评论 ---
刘德洪Sofire自己写js的时候,都变得不靠谱了。。 6年前 回复
看到网上到处讲nodejs时,都是最后一个简单的输出     res.end( 'Hello,World' );,但是很显然,我们的应用的处理,输出等比这复杂的多,不知道大家是用在生产环境的什么场景下的?
node.js 有常见的数据库驱动吗?前阵子兴冲冲地花了2天用node.js做了个简单的事情,一个月后有变化需要操作oracle,匆忙间没有找到,只好用Java再花1个星期重做过
--- 共有 1 条评论 ---
moonlight2当前有的oracle 模块 github: node-oracle 和node-db-oracle 5年前 回复
很早就关注过node了,最开始感觉库的量很缺乏,现在好多了,但是处处回调的写法太蛋疼了。写大点的东西会很痛苦
顶部