如何决定何时使用Node.js?

我是这种东西的新手,但最近我一直听到很多关于Node.js有多好。考虑到我非常喜欢使用jQuery和JavaScript,我不禁想知道如何决定何时使用Node.js。我心目中的网络应用是类似Bitly的东西--获取一些内容,将其存档。

从我过去几天做的所有功课中,我获得了以下信息。Node.js

  • 是一个命令行工具,可以作为一个普通的网络服务器运行,让人运行JavaScript程序
  • 利用了伟大的V8 JavaScript引擎
  • 当你需要同时做几件事情的时候,它是非常好的。
  • 是基于事件的,所以所有奇妙的Ajax的东西都可以在服务器端完成
  • 让我们在浏览器和后端之间共享代码
  • 让我们与MySQL对话

我所接触到的一些资料有

  • 潜入Node.js--介绍和安装]5
  • 了解NodeJS]6
  • Node by ExampleArchive.is)。
  • 让我们制作一个网络应用程序:NodePad]8

考虑到Node.js几乎可以在Amazon's EC2实例上开箱即用,我试图了解什么类型的问题需要Node.js,而不是像PHPPythonRuby这些强大的王者。我知道这真的取决于一个人对一种语言的专业知识,但我的问题更多的是属于一般的范畴。什么时候使用一个特定的框架,它特别适合什么类型的问题?

解决办法

你很好地总结了Node.js的厉害之处。我的感觉是,Node.js特别适合于那些你想保持从浏览器到服务器的持久性连接的应用。使用一种被称为"long-polling"的技术,你可以编写一个实时向用户发送更新的应用程序。在许多网络巨头,如Ruby on RailsDjango上做长轮询,会给服务器带来巨大的负荷,因为每个活跃的客户端都会吃掉一个服务器进程。这种情况相当于一个tarpit攻击。当你使用像Node.js这样的东西时,服务器没有必要为每个打开的连接维护单独的线程。

这意味着你可以在Node.js中创建一个基于浏览器的聊天应用程序,几乎不需要系统资源就能为大量客户提供服务。任何时候你想做这种长时间的轮询,Node.js都是一个不错的选择。

值得一提的是,Ruby和Python都有做这种事情的工具(分别是eventmachinetwisted),但Node.js做得特别好,而且是从头开始。JavaScript特别适合基于回调的并发模型,而且它在这方面表现出色。另外,能够在客户端和服务器上对JSON进行序列化和反序列化也是相当不错的。

我期待着读到其他的答案,这是个很好的问题。

值得指出的是,Node.js对于你在客户端/服务器之间重复使用大量代码的情况也很好。Meteor框架]8使之变得非常容易,很多人都认为这可能是Web开发的未来。我可以根据经验说,在Meteor中写代码是一件非常有趣的事情,其中很大一部分是花较少的时间考虑如何重组你的数据,这样在浏览器中运行的代码就可以很容易地操作它并把它传回去。

这里有一篇关于Pyramid和长轮询的文章,事实证明,在gevent的帮助下,设置起来非常容易。TicTacToe and Long Polling with Pyramid

评论(4)

我相信Node.js最适合于实时应用程序:网络游戏、协作工具、聊天室,或者任何一个用户(或机器人?或传感器?

我还应该提到,Socket.IO与Node.js的结合将进一步减少你的实时延迟,甚至超过长轮询的可能性。 Socket.IO在最坏的情况下会退回到长轮询,而使用网络套接字,甚至是Flash,如果它们可用的话。

但我也应该提到,几乎所有代码可能因线程而阻塞的情况都可以用Node.js更好地解决。 或者任何需要应用程序是事件驱动的情况。

另外,Ryan Dahl在我参加的一次演讲中说,Node.js的基准测试与Nginx的普通HTTP请求密切相关。 因此,如果我们用Node.js构建,我们可以很有效地提供正常的资源,而当我们需要事件驱动的东西时,它可以随时处理。

另外,它一直都是JavaScript。 整个堆栈的语言都是法语。

评论(3)

简而言之。

Node.js很适合有大量并发连接的应用程序,每个请求只需要很少的CPU周期,因为事件循环(与所有其他客户端)在执行一个函数时被阻塞。

一篇关于Node.js中的事件循环的好文章是Mixu'的技术博客:了解node.js的事件循环

评论(0)