第一章-了解nodeJs

2019-10-10  本文已影响0人  江疏影子

Google公司使用C++语言开发的一种高性能JS引擎,特点有非阻塞型I/O,事件环

非阻塞型I/O

传统单线程:访问数据库-数据库返回整个过程程序处于停滞状态。
nodeJs:访问数据库-数据库返回结果,转而执行后面的代码。

事件环

nodeJs中,在一个时刻只能执行一件事情的回调函数。但是在一个回调函数的中途可以处理其他事件(包括处理新的事件以及声明该事件的回调函数),然后返回执行原事件回调函数,这种机制称为事件环

nodejs运行机制

nodejs运行机制

适合nodeJs开发的应用程序

当应用程序需要处理大量的并发输入/输出,而在向客户端发送响应的同时不需要处理非常复杂的处理的时候。

聊天服务器:具有很高的聊天应用程序中,大量用户与聊天服务器的并发连接,而服务器本身并不需要有非常复杂的逻辑处理。
综合服务类网站和电子商务网站:在服务器端可能每秒钟存在上千条数据并且需要写入到数据库。nodejs通过其队列机制将数据迅速书写在缓存区,然后再通过每一个单独的处理从缓存区取出数据进行书写。如果是(Apach或者Tmacat)阻塞性I/O,需要为每一条数据的写入进行等待。
模块化

模块为单位划分功能,每个模块中的全局变量均为私有。只有通过exports对象暴露出去。

exports.printFoo=function(){
  return 'foo';
}

如果需要在其他模块中使用则需要引入,然后进行到该目录通过命令行node another.js
在another.js

let foo=require('./foo.js');
console.log(foo.printFoo())// foo

常用模块表格

模块名 作用 稳定度
assert 为应用程序的单元测试添加断点操作 5-locked 今后不被修改
buffer 用于实现二进制数据的存储与转换 3-stable 稳定
child_process 用于实现子进程的创建与管理 3-stable 稳定
cluster 用于实现多进程 1-experimental 实验行阶段
console 用于为控制台输出信息 4-API Frozen 今后API部分不会被修改
crypto 用于实现数据的加解密处理 2-unstable 不稳定
debugger 内置调试器帮助开发者调试应用程序 3-stable 稳定
dns 用于实现与DNS相关的处理 3-stable 稳定
domain 用于实现多个I/O之间的协作处理 2-unstable 不稳定
events 用于为事件处理提供一个基础类 4-API frozen 今后API部分不会被修改
fs 用于操作文件及文件系统 3-stable 稳定
http 用于实现HTTP服务器端及客户端 3-stable 稳定
https 用于实现HTTPS服务器端及客户端 3-stable 稳定
net 用于创建TCP服务器与客户端 3-stable 稳定
os 用于获取操作系统信息 4-API Frozen 今后API部分不会被修改
path 用于处理文件路径 3-stable 稳定
punycode 用于实现Punycode字符串的编码及解码 2-unstable 不稳定
querystring 用于处理HTTP请求中使用的查询字符串 3-stable 稳定
readline 用于读取一行标准输入流 2-unstable 不稳定
repl 用于实现REPL(Read-Eval-Loop)交互式运行环境
stream 用于为流的输入/输出处理提供一个基础类 2-Unstable 不稳定
string_decoder 用于实现从二进制数据到字符串数据之间的转换 3-stable 稳定
tls 用于使用openSSL来实现TLS/SSL通信处理 3-stable 稳定
tty 用于获取来自于TTY终端的信息 2-unstable 不稳定
url 用于实现URL字符串的解析与格式化 3-stable 稳定
until 用于实现各种使用函数 5-locked 今后不会被修改
vm 用于为js脚本代码提供一个独立的运行环境 2-unstable 不稳定
zlib 内部使用zlib类库来实现数据的压缩及解压处理 3-stable 稳定

使用该模块则需要用require(引入)的方式。
let http=require('http');
该函数返回http模块对象,将该对象赋值给http变量,可通过http变量来访问http模块中的属性以及方法。
另外有一些类、函数、对象可以不引入直接使用。

类、函数、对象 描述
Buffer类 用于为二进制数据的存储提供一个缓存区
setTimeout函数 延时器
clearTimeout函数 清除延时器
setInterval函数 定时器
clearInterval函数 清除定时器
require函数 用于加载引入模块
module对象 用于访问模块信息
process 用于访问进程信息

第一个应用程序

let http=require('http');
//引入http模块
http.createServer(function(req,res){
    //使用createServer方法来创建用于接收HTTP客户端请求并返回响应的HTTP服务器应用程序。
    //req->客户端请求对象
    //res->服务器端所做出的响应对象
    res.writeHead(200,{'Content-Type':'text/html'});
    //res.writeHead方法书写响应头,同时将响应头中的状态码定义为200,内容类型定义为text/html,表示返回一段HTML代码
    res.write('<head><meta charset="utf-8" /></head>');
    //res.write方法书写一行HTML代码,在本例中书写一个<head>标签,并且在<head>标签中通过使用meta属性将HTML网页所使用的字符集定义为UTF-8字符,显示中文。
    res.end('你好');
    //res.end方法输出一行HTML代码并结束响应流。
}).listen(8080,"127.0.0.1");
//listen方法指定该服务器使用端口及服务器绑定地址,并对该端口进行监听。
console.log('server running at http://127.0.0.1:8080/');
//向命令窗口输出括号内的内容。

nodeJs调试

最开始使用的是npm install -g node-inspector命令安装,但是在安装的过程中会报错ERR! Tried to download(404): https://node-inspector.s3.amazonaws.com/debug/v1.0.1/node-v64-win32-x64.tar.gz
通过查询发现Node V8 的调试 API 发生了很大变化,Node inspector 基本废了。Node8 本身也内置了 debugger 工具。
所以采用的是node-inspect
npm install -g node-inspect
node --inspect (fileName)

总结:在整个过程中,改一次代码就需要在cmd中终止一次运行,然后重新node fileName 比较繁琐。可以利用supervisor来进行实时更新。

npm install -g supervisor
//然后 supervisor fileName
上一篇下一篇

猜你喜欢

热点阅读