zoukankan      html  css  js  c++  java
  • Node开发指南

    一、Node.js是什么?

      Node.js是一个可以让JavaScript运行在服务器端的平台。他可以让JavaScript脱离浏览器的束缚运行在一般的服务器环境下,就像运行Python、Perl、PHP、Ruby程序一样,你可以用Node.js轻松地进行服务器端引用开发,Python、Perl、PHP、Ruby能做的事情Node.js几乎都能做,而且可以做得更好。

      Node.js是一个为实时Web应用开发而诞生的平台,它从诞生之初就充分考虑了在实时响应、超大模块数据要求下架构的可扩展性。这使得它摒弃了传统平台依靠多线程来实现高并发的设计思路,而采用了单线程、异步式I/O、事件驱动式的程序设计模型。这些特性不仅带来了巨大的性能提升,还减少了多线程程序设计的复杂性,进而提高了开发效率

      Node.js是一个让JavaScript运行在浏览器之外的平台。它实现了诸如文件系统、模块包、操作系统API、网络通信等Core JavaScript没有或者不完善的功能。随着Node.js的成功,各种浏览器外的JavaScript实现逐步兴起,因此产生了CommonJS规范,CommonJS试图拟定一套完整的JavaScript规范,以弥补普通应用程序所需的API,譬如文件系统访问、命令行、模块管理、函数库集成等功能。CommonJS制定者希望众多服务器端JavaScript实现遵循CommonJS规范,以便相互兼容和代码服用。Node.js部分遵循了CommonJS规范,但由于两者还都处于诞生之初的快速变化期,也会有不一致的地方。

      Node.js的JavaScript引擎是V8,来自Google Chrome项目,V8号称是目前世界上最快的JavaScript引擎,经历了数次引擎改革,他的JIT(Just-in-time Compilation,即时编译)执行速度已经快到了接近本地代码的执行速度。Node.js不运行在浏览器张,所以也就不存在JavaScript的浏览器兼容性的问题,可以放心地使用JavaScript语言的所有特性

    二、Node.js能做什么?

      使用Node.js,可以轻松的开发:

        1、具有复杂逻辑的网站

        基于社交网络的大规模Web应用

        Web Socket服务器

        TCP/UDP套接字应用程序

        命令行工具

        交互式终端程序

        带有图形用户界面的本地应用程序

        单元测试工具

        客户端JavaScript编译器

      Node.js内建了HTTP服务器支持,这个服务器不仅可以用来调试代码,而且它本身就可以部署到产品环境,它的性能足以满足要求

      Node.js还可以部署到非网络应用的环境下,比如一个命令行工具,Node.js还可以调用C/C++的代码,这样可以充分利用已有的诸多函数库,也可以将对性能要求非常高的部分用C/C++来实现

    三、异步式I/O与事件驱动

    四、windows上的Node.js

      Node.js与window的兼容性仍然不如POSIX操作系统,这一点在npm提供的第三方模块中体现得尤为突出,这主要是因为许多第三方的模块需要编译原生的C/C++代码,其编译框架和系统调用很多都是以Linux为范本的,与windows不兼容

    n是一个十分简洁的Node多版本管理器,

    如果你已经安装好了Node.js和npm系统,就可以直接使用npm install -g n 命令来安装n ,如果想完全通过n来管理Node.js,那么没安装之前哪来的npm呢?事实上,n并不需要Node.js驱动,它只是bash脚本,使用npm安装只是采取一种简便的方式而已,我们可以在http://github.com/visionmedia/n下载它的代码,然后使用make install命令来安装

    注意:n不支持windows 

      安装完n以后,在终端中运行 n ---help 即可看到它的使用说明 

    通过n获取到的Node.js实例都会安装在/usr/local/n/versions/目录中

    之后再运行n即可列出已经安装的所有版本的Node.js,其中“*”后的版本号为默认的Node.js版本,即可以直接使用node命令行调用的版本:

      n 

         0.6.11

       *  0.7.5

    如果你不想直接切换默认环境,可以使用n use版本号script.js直接指定Node.js的运行实例

    例如: $ n use 0.6.11 script.js

    警告:

      n无法管理通过其他方式安装的Node.js版本实例(如官方提供的 安装包,发行版软件源,手动编译),必须通过n安装Node.js才能管理多版本的Node.js

    Node.js命令行工具:

      1、运行Node.js程序的基本方法就是执行node script.js ,其中script.js是脚本的文件名

      2、我们可以把要执行的语句作为node -e的参数直接执行 

      例如: node -e "console.log('hello world')"   hello world

      3、使用node的REPL模式,REPL(Read-eval-print loop),即输入---求值---输出循环,运行无参数的node将会启动一个JavaScript的交互式shell,进入一个即时求值的运行环境,进入REPL模式以后,会出现一个“>”提示符提示你输入命令,输入后按回车,Node.js将会解析并执行命令。如果你执行了一个函数,那么REPL还会在下面显示这个函数的返回值,上面例子中的undefined就是console.log的返回值,如果输入一个错误的指令,REPL则会立即显示错误并输入调用栈,在cmd命令行工具中,输入node,按enter,就会出现Node.js的REPL模式

      node提出的REPL的好处:

         可以测试一个包能否正常使用,单独调用应用的某一个模块,执行简单的计算等

     listen函数创建事件监听,一旦用弄得开启,就会一直处于监听的状态,不会自己退出,当修改该文件时,刷新浏览器不会直接看到修改,需要退出,再重启node.js进程,才能看到改变,这个不利于调试,需要安装 npm install -g supervisor ,如果使用的linux或mac,直接输入可能会有权限错误,是因为npm需要把supervisor安装到系统目录,需要管理员授权,可以使用sudo npm install -g supervisor命令来安装 ,然后用 supervisor 命令启动app.js就可以了  例如:supervisor app.js 

    supervisor 这个小工具可以解决开发中的调试问题

    3.2.1 阻塞与线程

      什么是阻塞呢?线程在执行中如果遇到磁盘读写或者网络通信(统称为I/O操作),通常要耗费较长的时间,这是操作系统会剥夺这个线程的CPU控制权,使其暂停执行,同时将资源让给其他的工作线程,这种线程调度方式称为阻塞,当I/O操作完毕时???,操作系统将这个线程的阻塞状态解除,恢复其对CPU的控制权,令其继续执行,这种I/O模式就是通常的同步式I/O或者阻塞式I/O

      相应地,异步式I/O或非阻塞式I/O则是针对所有I/O操作不采用阻塞的策略,当线程遇到I/O操作时,不会以阻塞的方式等待I/O操作的完成或者数据的返回,而是将I/O请求发送给操作系统,继续执行下一条语句。当操作系统完成I/O操作时,以事件的形式通知执行I/O操作的线程,线程会在特定时候处理这个事件,为了处理异步I/O,线程必须有时间循环,不断的检查有没有未处理的事件,然后予以处理

    Node.js中,并不是所有的API都提供同步和异步版本,Node.js并不鼓励使用同步I/O

    事件由EventEmitter对象提供

    工作并不只是为了那点工资,而是为了创造一份属于自己的事业
  • 相关阅读:
    Thrift全面介绍
    ZooKeeper全面介绍
    Redis全面介绍
    第三篇:彻底解决ssh.invoke_shell() 返回的中文问题
    第二篇:ssh.invoke_shell() 切换root出现的新问题
    第一篇:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc3 in position 0: invalid continuation byte
    pycharm安装 suds模块报错:AttributeError: module 'pip' has no attribute 'main'
    变量赋值理解--Pyton中让两个值互换的方法
    02 Django框架基础(APP的创建访问)
    01 Web框架介绍
  • 原文地址:https://www.cnblogs.com/zouer/p/5033354.html
Copyright © 2011-2022 走看看