• NodeJS


    HTTP请求报文
    一个HTTP请求报文有 请求行、请求头、空行和请求数据 这几部分组成
    请求行 有请求方法、url和http协议版本字段 3个组成
    HTTP协议请求方法有 get、post、head、put、delete、options、trace、connect
    请求头 由 关键字/值对组成,每行一对, 关键字和值用英文冒号":"分隔, 请求头部通知服务器有关于客户端请求的信息
    空行 最后一个请求头之后是一个空行, 发送回车符和换行符, 通知服务器一下不在有请求头
    请求数据不在 get 方法中使用, 而是在 post 方法中使用, post 方法适用于需要客户填写表单的场合, 与请求数据相关的最常使用的请求头是 Content-Type 和 Content-Length
     
    响应报文
    http 响应也由三部分组成, 分别是: 状态行, 消息报头,响应正文.
    状态行: HTTP/1.1(响应采用的协议和版本号) 200(状态码) OK (描述信息)
    消息报头: 有 关键字/值对组成, 每行一对, 关键字和值 用英文的冒号 ' : ' 分隔
    响应正文:  HTML页面
     
    什么是Node.js
    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境
    Node.js 使用了一个 事件驱动、非阻塞是 I/0 的模型, 使其轻量有高效
    Node.js 可以让JavaScript运行在 服务器端上, 它让JavaScript伸到了服务器, 可以跟 PHP、JSP,、Python、Ruby等语言平等
     
    Node不同之处
    PHP、Python、Ruby等是独立语言, 二Node.js 用 JavaScript 运行在 v8引擎上
    高性能
     
    Node.js特性一 单线程
    在传统的服务器语言中, 用户请求一个服务器就会被分配到一个可用的线程中, 而每创建一个线程是需要消耗2M的内存, 如果要让城乡之处更多的用户,则加重了服务器成本(8G内存的服务器, 理论上能容纳 4000左右的并发量)
     
    Node.js不是用多个线程为每个请求执行工作的,相反而是它把所有工作添加到一个事件队列中,然后有一个单独线程,来循环提取队列中的事件,事件循环线程抓取事件队列中最上面的条目,执行它,然后抓取下一个条目当执行长期运行或有阻塞10的代码时,注意这里:它不会被阻塞,会继续提取下一个事件,而对于被阻塞的事件Node.js会从线程池中取出一个线程来运行这个被阻塞的代码,同时把当前事件本身和它的回调事件一同添加到事件队列
     
     
    特点二 非阻塞 I/0 
    程序执行过程中必然要进行很多I/0操作,读写文件、输入输出、请求响应等等。I/0操作时最费时的,至少相对于代码来说,在传统的编程模式中,举个例子,你要读一个文件,整个线程都暂停下来,等待文件读完后继续执行。换言之,170操作阻塞了代码的执行,极大地降低了程序的效率
     
    Node .js采用非阻塞型/O机制,非阻塞/0是程序执行过程中,/0操作不会阻塞程序的执行,也就是在1/0操作的同时,继续执行其他代码(这得益于Node的事件循环机制),在1/0设备效率还远远低于CPU效率的时代,这种I/O模型(非阻塞1/0)为程序带来的性能上的提高是非常可观的
     
     特点三: 事件驱动
    Node通过事件驱动的方式处理请求是无需为每一个请求创建额外的线程, 在事件驱动的模型当中, 每一个I/O 工作呗添加到事件队列中, 线程循环的处理队列上的工作任务, 当执行过程中遇到堵塞(读取文件、查询数据库)时, 线程不会停下来等待结果, 而是留下一个处理结果的回调函数, 转而继续执行队列中的下一个任务,这个传递到队列中的回调函数在堵塞任务运行结束后才被线程调用
     
    V8引擎是一个非堵塞事件驱动I/O框架, Node基于V8引擎强力驱动. 而这个的底层代码近半都是用于事件队列
     
    查看NodeJS版本  node -v
    简单小案例:
    /* 使用node开发就是借助包来开发, 所以第一步导入包 */
    /*  require: 表示导入一个包, 参数表示包的名称*/
    var http = require('http');
    /* 使用http创建服务器 createServer 有一个回调参数*/
    /* 回调中有两个参数 第一个 req: 必须的(required); 第二个res: 响应(response) */
    var server = http.createServer(function (req, res) {
      /* 只要有请求,就会有回调*/
      /** 当请求完毕后, 返回给客户端对应的数据 */
      res.end('hello word')
    })
    /** 监听服务器 
     * 第一个参数表示端口, 第二个参数表示服务器的ip地址
     * 端口号可以是任何, 但是一般前面2000是属于系统使用的, 所以我们可以使用2000以后的
    */
    server.listen(3000, '127.0.0.1')
    /** 运行 
     * ①在终端运行  node +文件名
     * ②在网页直接输入 上边的地址还有端口号
    */
     设置响应
     res.writeHead() 
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    NODEJS
  • 相关阅读:
    linux那点事儿(六)进程管理详解(推荐)
    linux那点事儿(下)
    视图的架构刷新和绑定
    HttpHandler开发的两个重点问题
    RichTextBox控件的几点有意思的东西
    重复输入某个字符(C++,C#)
    几个博客系统点评
    怎么理解符号整数的取值范围(C++)
    为SSIS编写自定义任务项(Task)之进阶篇
    LINQ TO XML之判断不存在行则插入
  • 原文地址:https://www.cnblogs.com/maxiag/p/13416446.html
Copyright © 2020-2023  润新知