【问题标题】:Usages of Node.js - What obstacles is it aiming to provide a ramp for?Node.js 的用法 - 它旨在为哪些障碍提供坡道?
【发布时间】:2011-07-27 06:35:27
【问题描述】:

我正试图弄清楚 Node 适合的地方。它是利基市场,可以这么说...... Node 旨在为哪些障碍提供坡道?

我已阅读示例并观看了一些演示视频。这一切看起来都非常流畅……创建一个简单的 Web 服务器;创建一个简单的 TCP/IP 聊天服务器;将 Node 用作数据库服务器的基于 JSON 的前端……但它适用于何处?我的意思是,除了最后一个例子,和 Node 有什么关系?

我想我要问的是:你会用 Node 做什么?为什么?

【问题讨论】:

  • 任何网站应用程序。因为它的事件 IO 和它是服务器和客户端上的 JS。
  • 焦点似乎是在服务器端生成动态 HTML 的交互式网站。
  • @Swiss:所以,就像 IIS、Apache 或几乎任何 HTTP 服务器一样?
  • @Mark 不完全一样,因为你可以做的不仅仅是用它来托管网站,但这似乎是 Node.js 的主要焦点。
  • @Mark HTTP 服务器并没有真正被吹捧为托管非 HTTP 服务,但 Node.js 是。 Node.js 主要关注的服务类型似乎是 HTTP 服务。

标签: node.js


【解决方案1】:

Convince the Boss

使用节点的原因列表:

  • 速度。 V8 速度很快。比python快,比php快。
  • 事件 IO。 IO 正确完成。不用纠结线程,一切都很好,很容易。
  • 低级 Web 服务器。对动态语言中的抽象进行良好控制。
  • JavaScript。一种优秀的语言,拥有大量开发人员编写异步代码的经验。开发速度快,维护方便,因为一切都可以用一种语言完成(客户端、服务器端、数据库访问)。

可与 node.js 一起使用的库和工具:

  • express.js:MVC Web 框架。非常轻巧。为您提供路由和视图。构建在 connect.js 之上。开箱即用的视图和路由的灵活控制,支持多个 css 和模板引擎。与 node.js 本身一样,它很简单,并为您提供了对 Web 服务器的细粒度控制。就我个人而言,我发现控制权和抽象权之间的平衡。
  • socket.io :事实上的 websocket 抽象。内置了很多优雅的降级支持,因此没有 websocket 的浏览器使用彗星技术或闪存桥。让您以轻松、轻松和实时的方式在客户端和服务器之间进行对话。
  • now.js :构建在 socket.io 之上,并为您提供跨客户端和服务器的同步名称空间。允许您从客户端调用服务器方法,反之亦然。

所有这些库都基于这样一个事实:node.js 允许您以低级别的方式处理所有事情,并且与客户端的通信顺畅且流线型,因为您在任一端使用相同的语言。

对我来说,卖点是我在客户端和服务器上拥有相同的 MVC 库 backbone.js。我所有的模型代码都被重复使用了。客户端和服务器上的模型通过now.js 轻松同步。

我的数据库访问是由cradle(或mongoose)驱动的,这些都是用JavaScript 编写的。实际上,我的 MVC 直接连接到数据库并无缝保存我的模型。这些模型定义了有用的方法,如 savefetch 来进行持久数据库存储。我不手动触摸数据库,因为我的 MVC 允许我插入数据库驱动程序来为我执行此操作。

我的模板渲染是使用EJS 完成的,我的视图在客户端和服务器之间共享。只是有大量的代码重用,我的整个 Web 开发都是用 JavaScript 完成的,这意味着我不必切换我的编码范式或风格。

我也无法决定如何处理服务器上的内容和客户端上的内容之间的灰色区域,因为该灰色区域已被完全消除并且客户端和服务器无缝集成。

如果您要编写一个复杂的动态 ajax Web 应用程序,那么 node.js 是一个完美的候选者。如果您打算拥有一个静态网站,那么 node.js 是一个完美的候选者(您可以在 20 分钟内完成设置)。

如果您要编写一个客户端功能和回发很少的重服务器网站,那么使用 php 或 ASP.NET 可能会更好。但是,如果您这样做,您应该研究更动态的客户端功能并使用 ajax。

【讨论】:

  • 将 Node 中使用的想法应用到其他框架对我来说会很有趣。在我看来,这个 HTTP 服务器范式与 JavaScript 或 V8 引擎没有任何联系。
  • @Mark eventmachine for python 是类似的。确实没有什么将它与 JavaScript 联系起来。但是我们有 javascript 的事实允许您以不同的方式处理它。 JavaScript 作为一种语言和社区非常适合这种 http 服务器范式
  • 它与 JavaScript 的联系在于 JavaScript 天生是异步的,并且缺乏同步库。它与 V8 的联系是 V8 真的非常快。
  • @Mark 它没有。更好的是,在 web 开发领域,javascript 是一大群软件工程师编写异步代码经验的视图语言之一。因此,在 web 中使用 JavaScript 作为服务器端异步语言是很自然的开发部门,因为人们熟悉它。
  • @Mark 我没有这样说。亨利将军做到了。我说你可以用自然的方式编写异步代码。
【解决方案2】:

我相信 Node.js 宣称的优势之一是它适合作为websockets 服务器。 Node.js 中的连接很便宜(因为它周围的框架很少),因此单个系统可以支持许多持久连接。

【讨论】:

    【解决方案3】:

    well 节点通常适用于维持大量开放连接(到其他节点、服务等)。

    这应该让您了解它与其他人相比的表现(+ 讨论作为奖励): Scale Stack vs node.js vs Twisted vs Eventlet

    Node 也非常适合 shell/终端脚本语言,很好的例子是: github.com/indexzero/永远

    作为 javascript @ server-side 解决方案 - 缩小了构建前端 (html/js) 和后端 (在当前情况下为 nodejs) 解决方案之间的差距。

    您也会发现这很有用: List of Projects, Applications and Companies Using Nodejs

    【讨论】:

      【解决方案4】:

      例如,如果您查看 modules 页面,您可以获得很多 node.js 用例。它从大量的库(如路由器、静态文件服务器、Web 框架和 WebSockets 服务器)到大量特定于 DB 的连接模块、独立数据库、TCP/IP 服务器和流行的协议/库包装器,它们都在等待用于构建其他疯狂就像these 公司所做的那样。

      如果你想利用轻量级、低级和快速的服务器端框架,它使用事件 IO 并提供丰富的开源社区驱动库集(你应该,或者更确切地说,必须在一定程度上了解 JavaScript)才能构建其他模块或将其用作独立项目的基础(或作为 node.js 可以比其他解决方案做得更好的特定功能的补充)。

      【讨论】:

        【解决方案5】:

        这是个好问题!正如您所说,使用 Node 进行编码既快速又简单。但是,它并不是唯一快速而简单的工具,那么它的独特之处是什么?期待其他答案!

        我的贡献:使用 Node 的优点之一是您可以用 JavaScript 编写客户端和服务器端代码。这为您提供了一些其他情况下不会有的代码可重用性。

        【讨论】:

        • 我会冒险猜测服务器端和客户端之间的代码重用将是最少的。
        • 你觉得呢?在一个简单的网页中,表单输入验证可以被重用,而在具有高级交互的复杂 Web 应用程序中,我可以想象不平凡的代码被共享。没有?
        • @Mark 代码重用是巨大的。我正在编写一个重型客户端/服务器多人游戏。 70% 的代码被重复使用。
        • 这让我很惊讶。而且非常有趣。
        【解决方案6】:

        目前我正在使用一个用 node.js 编写的很棒的等距游戏引擎 网络创建路径、视口、相机、地图.. 如果您碰巧想为数百万用户制作 MMO。那么 node.js 可以是一个选择。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-03-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多