为什么要用Node.js?哪些场合可以使用 Node.js?

[ 2022-05-05 08:40:07 | 作者: admin ]
字号: | |

JavaScript 的日益发展带来了很多变化,当今的 Web 开发面貌已经变得截然不同。在几年前是很难想象在服务器上运行 JavaScript 的。

在深入研究Node.js之前,你可能想了解使用跨栈的 JavaScript 有什么好处,它统一了语言和数据格式(JSON),允许你以最佳的方式重用开发人员资源。将 Node.js 合并到技术栈中是一个关键优势。

Node.js 是一个基于 Chrome 的名为 V8 的 JavaScript 引擎构建的 JavaScript 运行环境。值得注意的是,Node.js 的创建者 Ryan Dahl 的“受到 Gmail 等应用的启发”,目标是为了开发一个具有实时推送功能的网站。在 Node.js 中,他提供了一个用于处理非阻塞事件驱动的 I/O 工具。【视频教程推荐:nodejs 教程 】

用一句话来概括:Node.js 在基于websockets 推送技术的实时 Web 应用中大放异彩。在过去的 20 多年来我们一直在使用基于无状态请求 - 响应模式的无状态 Web 应用,现在终于拥有了能够实时双向连接的 Web 应用,其中客户端和服务器都可以启动通信,并允许它们自由地交换数据。

这与典型的总是由客户端发起通信的 Web 响应模式形了成鲜明的对比。此外它也同样基于在标准端口 80 上运行的开放 Web 技术栈(HTML,CSS和JS)。

有人可能会争辩说,我们多年来一直以 Flash 和 Java Applet 的形式做到这一点 —— 但实际上,这些只是使用 Web 作为传输协议将数据传给客户端的沙盒环境。此外,它们是隔离运行的,通常在非标准端口上运行,这可能需要额外的权限。

凭借其优势,Node.js 在依赖其独特优势的众多知名公司的技术堆栈中发挥着关键作用。 Node.js 基金会几乎已经整合了所有最好的想法,可以在 Node.js 基金会的案例研究页面上找到关于为什么企业应该考虑 Node.js 的简短PPT。

在本文中,我将不仅要讨论如何使用这些优势,而且还要讨论 为什么 你可能想要使用 Node.js ,并用一些经典的 Web 应用程序模型作为示例。

它是如何工作的?

Node.js 的主要思想是:在面向跨分布式设备运行的数据密集型的实时程序时,使用非阻塞、事件驱动的 I/O 来保证轻量和高效。

这读起来很拗口。

这意味着 Node.js 不是 一个即将成为主宰 Web 开发界的能够解决一切的新平台。 相反,它是一个满足特定需求的平台。理解这一点绝对是有必要的。你绝不希望将 Node.js 用于 CPU 密集型的操作;实际上,将它用于进行大量繁重运算的场合将会消除它几乎所有的优点。 Node.js 真正发挥作用的地方在于构建快速、可扩展的网络应用,因为它能够以高吞吐量处理大量并发连接,这相当于具有高可扩展性。

其底层的工作原理非常有趣。传统的 Web 服务技术每个连接(请求)都会产生一个新线程,占用系统内存并最终受限于可用的最大内存,而 Node.js 在单线程上运行,使用非阻塞 I/O 调用,允许它支持数以万计的并发连接(在 event loop 中维持)。


快速计算:假设每个线程需要 2 MB 内存,那么在有 8 GB 内存的系统上运行的话,理论上最多有 4000 个并发连接(计算来自 Michael Abernethy 的文章 “Just what is Node.js?“,2011年在 IBM developerWorks 上发布;不幸的是,这篇文章的链接现在已经失效了),这还没有算上线程之间的上下文切换的成本。这就是你通常在传统的 Web 服务器技术中处理的场景。通过避免所有这些问题,Node.js 实现了超过 1M 连接并发数的级别,以及 600k 的 websockets 并发连接数。

当然,编写 Node.js 应用的潜在缺陷是存在客户端请求之间共享单个线程的问题。首先,繁重的计算可能会阻塞 Node 的单个线程并导致 所有 客户端出现问题(稍后会详细说明),因为传入的请求将被阻塞,直到计算完成为止。其次开发人员需要 非常小心,不要让异常冒泡到到核心(最顶层)Node.js 事件循环,这将导致 Node.js 实例终止(程序崩溃)。

为了避免异常冒泡到顶层,常用技术是将错误作为回调参数传递回调用者(而不是像在其他环境中那样抛出它们)。即使一些未被处理的异常冒泡到顶层,也有一些工具来监视 Node.js 进程并执行必要的恢复崩溃 (虽然可能无法恢复到用户会话的当前状态),最常见的是 Forever 模块。


https://www.php.cn/js-tutorial-459032.html

评论Feed 评论Feed: http://blog.xg98.com/feed.asp?q=comment&id=2850

这篇日志没有评论。

此日志不可发表评论。