您的位置:首页 > Web前端 > Node.js

node

2015-11-26 15:16 411 查看
转:http://www.jb51.net/article/75270.htm

一、node是啥?

  1、node是一个服务器端javascript解释器

  2、Node的目标是帮助程序员构建高度可伸缩的应用程序,编写能够处理数万条同时连接到一个物理机的连接代码,处理高并发和异步I/O是Node受到开发人员关注的原因之一

  3、Node本身运行Google V8 Javascript引擎,所以速度和性能非常好,看chrome就知道,而且Node对其封装的同事还改进了起处理二进制数据的能力,因此,Node不仅仅简单的使用了V8,还对其进行了优化,使其在各种环境下更加给力

  4、第三方的扩展和模块在Node使用中起到重要的作用,下面也会介绍下载npm,npm就是模块的管理工具,用它安装各种Node的软件包(如express,redis等)并发布自己为Node写的软件包

二、node能做什么和它的优势

  在目前的web应用中,客户端和服务器端之间有些交互可以认为是基于事件的,那么AJAX就是页面及时响应的关键,每次发送一个请求时(不管请求的数据多么小),都会在网络里走一个来回,服务器必须针对这个请求作出响应,通常是开辟一个新的进程,那么越多用户访问这个页面,所发起的请求个数就会越来越多,就会出现内存溢出,逻辑交互带来的冲突。网络瘫痪、系统崩溃这些问题

  Node的目标是提供一种构建可伸缩的网络应用的方案,在hello world例子中,服务器可以同时处理很多客户端连接

  Node和操作系统有一种约定,如果创建了新的链接,操作系统就将通知Node,然后进入休眠,如果有人创建了新的链接,那么它(node)执行一个回调,每一个链接只占用了非常小的(内存)堆栈开销

  


所谓的异步,大家应该都能想得到运行时会先打先显示async ,再显示successfully

   Node是无阻塞的,心情求到达服务器是,不需要为这个请求单独做什么事情,Node仅仅是在哪里等待请求的发生,有请求就处理请求

   Node更擅长处理体积小的请求以及基于事件的I/O

   Node不仅仅是做一台web服务的框架,它可以做更多,比如它可以做Socket服务,可以做比方说基于文件的,然后基于像一些比方说可以有子进程,然后内部的它是一个很完整的事件机制,包括一些异步非注射的解决方案,而不仅仅局限在网络一层,同时它可能,即便作为一个web服务来说,它提供了更多可以深入这个服务内核、核心的一些功能,比方说Node使用的Http Agent ,这块就是它可以更深入这个服务内核来去做一些功能

三、Node事件流概念

  因为Node采用的是事件驱动的模式,其实的很多模块都会产生各种不同的事件,可由模块来添加事件处理方法,所有能够产生事件的对象都是事件模块中的EventEmitter类的实例,代码是全世界通用的语言

EventEmitter类中的方法都与事件的产生和处理相关:

  1、addListener(event,listener)和on(event,listener)这两个方法都是将一个监听器添加到指定事件的监听器数组的末尾

  2、once(event,listener)这个方法为事件添加一次性的监听器,该监听器在事件第一次触发时执行,过后将被移除

  3、removeListener(event,listener)该方法用来将监听器从指定事件的监听数组中移除出去

  4. emit(event, [arg1], [arg2], [...]) 方法用来产生事件。以提供的参数作为监听器函数的参数,顺序执行监听器列表中的每个监听器函数。

在Node中,存在各式各样不同的数据流,Stream(流)是一个由不同对象实现的抽象接口,例如请求HTTP服务器的request是一个流,类似于sudout(标准输出);包括文件系统、HTTP请求和相应、以及TCP/UDP连接等,流可以是可读的,可写的,或者既可读有可写,所有流都是EventEmitter的实例,因此可以产生各种不同的事件

可读流主要会产生以下事件:

  data 当读取到流中的数据时,此事件被触发

  end 当流中没有数据可读时,此事件被触发

  error当读取数据出现错误时,此事件被触发

  close当流被关闭时,此事件被触发,可是并不是所有流都会触发这个事件。(例如,一个连接进去的HTTP request 流就不会触发close事件)

  还有一种比较特殊的fd事件,当在流中接收到一个文件描述符是触发此事件,只有UNIX流支持这个功能,其他类型的流均不会触发此事件

  强大的File System文件系统模块:

  Node中的fs模块用来对贝蒂文件系统进行,文件中的I/O是由标准POSIX函数封装而成,需要使用require('fs')访问这个模块。所有的方法都提供了异步和同步这两种方式。

  fs模块中提供的方法可以用来执行基本的文件操作,包括读、写、重命名、创建和删除目录以及获取文件元数据等。每个操作文件的方法都有同步和异步两个版本。

  异步操作的版本都会使用一个回调方法作为最后一个参数,当操作完成的时候,该回调函数会被调用,二回调方法的第一个参数总是保留操作时可能出现的异常,如果操作正确成功,则第一个参数的值时null或undefined。

  同步操作的版本的方法名称则是在对应的异步方法之后加上一个Sync作为后缀,比如异步的rename()方法的同步版本是renameSync()。下面列出来了fs模块中的一些常用方法,都只介绍异步操作的版本。

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: