美文网首页
第一章-了解nodeJs

第一章-了解nodeJs

作者: 江疏影子 | 来源:发表于2019-10-10 11:33 被阅读0次

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

    非阻塞型I/O

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

    事件环

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

    nodejs运行机制

    nodejs运行机制
    • V8引擎解析JavaScript脚本。
    • 解析后的代码,调用Node API
    • libuv库负责Node API的执行。它将不同的任务分配给不同的线程,形成一个Event Loop(事件循环),以异步的方式将任务的执行结果返回给V8引擎。
    • V8引擎再将结果返回给用户。

    适合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
    

    相关文章

      网友评论

          本文标题:第一章-了解nodeJs

          本文链接:https://www.haomeiwen.com/subject/xthsyctx.html