Fork me on GitHub

node学习之node基础

这几天在学习node,以下的笔记主要是自己看《Node.js开发指南》的笔记,下面的内容主要是1到4章的

Node.js开发指南

  • 单线程异步式I/O事件驱动式的程序设计模型

  • Node.Js是可以让JavaScript运行在服务器端的开发平台

  • Node.js内建了一个HTTP服务器支持,也就是你可以轻而易举地实现一个网站和服务器的组合

  • Node.js还可以部署到非网络应用的环境下,比如一个命令行工具
    Node.js可以调用C/C++的代码

  • Node.js在执行的过程中会维护一个事件队列,程序在执行时进入事件循环等待下一个事件到来,每个异步式I/O请求完成后会被推送到事件队列中,等待程序进程进行处理

  • 内存上下文切换??

  • 回调函数很重要
  • Node.js的异步机制是基于事件的,所有的I/O、网络通信、数据库查询都以非阻塞的方式请求,返回的结果由事件循环处理

  • 异步机制

  • 事件循环

第三章 Node.js的快速入门

  • node script.js 其中script.js 就是脚本的文件名

  • node -e "console.log('Hello')"

  • Node的REPL模式,REPL(Read-eval-print loop),即输入—求值—输出循环
  • 两次Ctrl+c退出该模式

node和php

  • 使用supervisor可以实现“热加载
    supervisor 文件名

  • 当线程遇到I/O操作时候,不会以阻塞的方式等待I/O操作的完成或者数据的返回,而是将I/O请求发送给操作系统,继续执行下一条语句。当操作系统完成I/O操作时候,以事件的形式通知I/O操作的线程,线程会在待定的时间处理这个事件

  • 单线程、非阻塞
    I/O部分和计算部分。通常I/O部分占用的时间比计算的部分多得多

多线程同步式

  • 异步式I/O传统的多线程阻塞式I/O少了多线程的开销

比较

  • EventEmitter

  • require不会重复加载模块

  • 覆盖exports
    exports
    使用module.exports = Hello 代替exports.Hello = Hello

  • CommonJs规范应该具备以下特征:

CommonJs

  • npm是node官方提供的包管理工具

  • 获取一个包
    npm [install/i] [package_name]
    本地模式和全局模式
    npm [install/i] -g [package_name]

  • 本地模式不会注册PATH环境变量,仅仅是把包安装到node_modules子目录下,其中的bin目录没有包含在PATH环境变量中,不能在命令行中调用

  • 使用全局模式安装的包并不能直接在 JavaScript 文件中用require获得,因为 require 不会搜索 /usr/local/lib/node_modules/

本地模式与全局模式

  • npm link 不支持Windows

  • 通过使用npm init可以根据交互式问答产生一个符合标准的package.json

  • npm pubilsh发布包 package.json中修改version字段,重新使用npm publish重新发布

  • node中的全局对象是global,所有的全局变量(除了global本身以外)都是global对象的属性

  • process就是一个全局变量,即global对象的属性。它用于描述当前node进程状态的对象,提供一个与操作系统的简单接口

  • process.nextTick(callback)的功能是为事件循环设置一项任务,Node.js会在下一次事件循环响应时候调用callback

  • 常用工具util是node的核心模块,提供常用函数的集合,用于弥补核心JavaScript的功能过于精简的不足

  • util.inherit(constructor,superConstructor)是一个实现对象间原型继承的函数
    util.inspect(object,[showHidden],[depth],[])是将任意对象转换成字符串的方法,通常用于调试或者错误输出

  • 对于每个时间,EventEmitter支持若干个事件监听器

  • Node标准库提供了http模块,其中封装了高效的HTTP服务器和一个简易的HTTP客户端

  • http.Server是HTTP模块中的HTTP服务器对象,用Node.js做的所有基于HTTP协议的系统,如网站、社交应用甚至代理服务器,都是基于http.Server实现的

经典实例

  • http.Server的事件
    对它的事件编写响应函数即可实现http服务器的所有功能
    request
    connection
    close

  • http.createServer([requestListener])
    功能是创建一个HTTP服务器并将requestListener作为request事件的监听函数

  • http.ServerRequest是HTTP请求的信息
    一般由http.Server的request事件发送的,作为第一个参数进行传递

以下3个事件用于控制请求体传输
data
end
close

  • http.ServerResponse是返回给客户端的信息,决定了用户最后能够看到的内容。也是有http.Serverrequest事件发送的,作为第二个参数进行传递

重要成员函数

  • http模块提供两个函数http.requesthttp.get,功能是作为客户端向http服务器发起请求

http.request(options,callback)发起http请求。option是类似关联数组的对象,表示请求的参数,callback是请求的回调函数

1

结果

  • http.ClientRequest是由http.request或者http.get返回的对象,表示一个已经产生而且正在进行的http请求
-------------本文结束感谢您的阅读-------------