Nodejs: up and running (Foreword by Ryan Dahl)

Nodejs: up and running (Foreword by Ryan Dahl)

本文译自node:up and running序,由node.js之父 Ryan Dahl 编写

前言由瑞安达尔编写

2008年,当时我正在寻找一种新的开发平台来创建网站,这比寻找一个新的开发语言更重要,事实上,我不怎么关心语言的实现细节方面。因此,我关心先进的网站推送技术,就像gmail样,服务器有能力将数据推送给用户,而不是用户不得不重复的去拉取。现有的平台都是和服务器紧耦合的,类似按这样的顺序工作:收到一个请求然后响应。为了将数据推送给浏览器,这个平台需要有能力处理一定数量的打开连接和很多闲置连接。

我知道如何用c语言通过调用系统层让它工作,如果我只使用非阻塞的socket,每个连接的开销都很小。在一个小型的测试中,我演示了一个能够处理成千上万的闲置连接并且有很大吞吐量的服务器。我知道,使用unix服务器是实现的最佳方式。即便如此,我还是不打算使用C语言,我希望用一个具有出色流动性的动态语言来实现。虽然C语言能够发出准确的系统调用,但是我想每一个编程语言都可以做到,而且C语言以非常丑陋和另类的方式来进行socket编程。我的理论是非阻塞socket,这并不难实现,更进一步,我希望每一件事物都是非阻塞的。

在2008年年底,Google宣布发布了Chrome和它的新javascript引擎V8。一个更快的javascript引擎能够让web页面运行更加快速,当然v8做到了。瞬间在google,apple,mozilla和microsoft中存在一种竞争。然后结合了道格·克罗克福德的《javascript语言精粹》一书,瞬间javascript从一门被人轻视的语言成为了一门非常重要和受人关注的语言。

我萌生了一个想法,利用javascript编写非阻塞的socket!因为javascript并没有socket库,所以我可能是第一个推出这个新颖而且富有希望的想法的人。仅仅需要使用V8引擎然后粘合在我的非阻塞C语言代码之上,然后就完成了。我退出了我承包的工作,然后开始没日没夜的做这件事情。一旦我发布了一个可用版本,我想立刻有用户向我提交了错误报告,然后我开始修改这些错误,就这样我渡过了3年。

事实证明javascript能够非常好的处理非阻塞的socket,当然这不是从一开始就知道的。闭包让每一个事物非阻塞成为了可能。用户可以只用寥寥几行javascript代码,就构建出各种各样的复杂的非阻塞服务器。我一开始害怕整个系统可能无法使用,但是当世界各地的黑客为它建立起库之后,我大大缓解了这种想法。单进程事件驱动模型和非阻塞接口可以比处理消耗非常大的线程更有优势,但是整个库会变得更加的复杂。

在Node中,用户找到了一个默认就提供很好扩展的系统。因为做出调度的是核心系统,没有任何东西可以在核心系统中做的太过分(比如阻塞一个线程),因此性能从不会降低多少。这比传统的阻塞式做法提高了一个量级,它更有优势是因为它可以处理大量的并发。

今天,Node开始在全球范围内被大量创业公司和已成立的公司使用。例如Voxer、Uber to Walmart和Microsoft等。保守估计Node每天都会处理几十亿的请求。越来越多的人们参与到这个项目中,可用的第三方模块和扩展在不断的增长并且质量也在不断的提高。虽然我曾经建议让Node担任关键的应用,但是现在我认为Node能够胜任即使是最负载最重的系统节点。

本书作为向导很好的为读者介绍了Node还有很多第三方模块的。在学习本书之前,你必须拥有基本的通过javascript来创建复杂和互动站点的基础。如果你曾经使用过其他服务端框架,你将非常轻松的通过Node来建立一个服务器。

-瑞安达尔,Node.js的创始人

enter image description here


10 回复

Node.js: Up and Running (Foreword by Ryan Dahl)

前言

本文译自 Node: Up and Running 序,由 Node.js 之父 Ryan Dahl 编写。

瑞安达尔的前言

2008 年,我在寻找一种新的开发平台来创建网站,这比寻找一个新的开发语言更重要。当时,我对语言的实现细节并不是特别关心。我更关心的是如何实现像 Gmail 那样的先进网站推送技术,即服务器能够主动将数据推送给用户,而不再是用户不断刷新页面来获取数据。当时大多数平台都是与服务器紧密耦合的,它们通常按以下顺序工作:接收请求 -> 响应请求。为了实现数据推送功能,服务器需要能够处理大量的打开连接和许多闲置连接。

我知道如何用 C 语言通过系统调用来实现这一点,特别是使用非阻塞的 socket 可以显著减少每个连接的开销。在一个小型测试中,我展示了一个能够处理成千上万个闲置连接并保持高吞吐量的服务器。尽管我知道 Unix 服务器是实现这一目标的最佳选择,但我并不想使用 C 语言,而是希望使用一种具有出色灵活性的动态语言来实现。虽然 C 语言可以发出精确的系统调用,但我想任何编程语言都能做到这一点,并且 C 语言在进行 socket 编程时显得相当丑陋和另类。我的想法是实现一个非阻塞的 socket,这并不难,而且我希望所有的事情都能是非阻塞的。

在 2008 年底,Google 宣布发布了 Chrome 和其新的 JavaScript 引擎 V8。V8 的出现使得 Web 页面运行速度大幅提升。这引发了 Google、Apple、Mozilla 和 Microsoft 之间的竞争。同时,Doug Crockford 的《JavaScript 语言精粹》一书让 JavaScript 从一门被人轻视的语言变成了重要且备受关注的语言。

我萌生了一个大胆的想法:用 JavaScript 编写非阻塞的 socket!虽然 JavaScript 没有内置的 socket 库,但我想我是第一个提出这个新颖想法的人。只需要使用 V8 引擎并将其粘合到我的非阻塞 C 语言代码上即可。我辞去了承包工作,全身心投入到这个项目中。一旦我发布了一个可用版本,用户很快就向我提交了错误报告,我开始修复这些问题,就这样度过了三年时间。

事实证明,JavaScript 能够很好地处理非阻塞的 socket,虽然一开始并不确定。闭包使得一切非阻塞成为可能。用户只需用少量的 JavaScript 代码就能构建出复杂的非阻塞服务器。我起初担心整个系统可能无法使用,但当世界各地的开发者为其建立了各种库后,这种担忧逐渐消失。单进程事件驱动模型和非阻塞接口比处理大量线程的模型更具优势,但整个库会更加复杂。

在 Node 中,用户找到了一个默认就提供良好扩展的系统。由于调度是由核心系统完成的,没有任何东西会在核心系统中做得太过分(比如阻塞一个线程),因此性能不会显著下降。这比传统的阻塞式方法提高了性能,因为它能处理大量的并发请求。

今天,Node 已经在全球范围内被大量创业公司和已有公司广泛采用。例如 Voxer、Uber、Walmart 和 Microsoft 等。保守估计,Node 每天都要处理数十亿的请求。越来越多的人参与进来,可用的第三方模块和扩展不断增加,并且质量也在不断提高。虽然我曾建议仅将 Node 用于某些应用,但现在我认为 Node 能够胜任甚至是最重负载的系统节点。

本书作为指南,很好地介绍了 Node 以及许多第三方模块。在开始学习本书之前,你需要具备通过 JavaScript 创建复杂和互动网站的基本技能。如果你已经熟悉其他服务器端框架,那么通过 Node 来搭建服务器将会变得非常容易。

  • 瑞安达尔,Node.js 的创始人

示例代码

下面是一个简单的 Node.js 示例,展示了如何使用非阻塞 I/O 进行 HTTP 服务器的搭建:

const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello, World!\n');
});

server.listen(3000, () => {
  console.log('Server is listening on port 3000');
});

这段代码创建了一个简单的 HTTP 服务器,监听 3000 端口,并返回 “Hello, World!”。这是 Node.js 非阻塞 I/O 的一个典型示例,展示了其简洁性和高效性。


最近有本新的 enter image description here

能发这本电子档的吗?snoopyxdy@163.com,不胜感谢啊

不错!!!

又上传了一本,总共3本新书,都是今年出的,很适用哦,E文的,看不懂只能用google翻译了哦 http://pan.baidu.com/share/link?shareid=68242&uk=1963216441

果断下载来看看》。。。

本文是 Node.js 之父 Ryan Dahl 所写的序言,介绍了他创建 Node.js 的初衷和过程。

Ryan 在寻找一种新的开发平台时,注意到了 Gmail 这样的应用,服务器能够主动推送数据给用户,而不是用户不断刷新。他希望通过一种非阻塞的方式实现这一目标。他选择了 JavaScript 和 V8 引擎,利用非阻塞 socket 实现了高性能的服务器。他提到,JavaScript 的闭包特性使得构建复杂的非阻塞服务器变得简单,而且性能优异。

以下是一个简单的示例代码,展示如何使用 Node.js 创建一个非阻塞 HTTP 服务器:

const http = require('http');

const server = http.createServer((req, res) => {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
});

server.listen(3000, () => {
    console.log('Server running at http://localhost:3000/');
});

这段代码创建了一个简单的 HTTP 服务器,监听 3000 端口,并返回 “Hello World” 给客户端。该服务器使用非阻塞 I/O 模型,能够同时处理大量并发连接。

回到顶部