zoukankan      html  css  js  c++  java
  • 开心菜鸟系列学习笔记--------初探Nodejs(了解篇)

    一Node.js开始学习了!  
      1) 输出hellow worlds
       a.建一个js文件 hello.js 写 console.info('hellow world !!!');
       进入终端 cd node 目录 然后 node d:/nodejs/www/hello.js 回车
       b. node -e "console.info('hello word !!')"
       c.使用node的REPL模式
        node
         console.info('hello world ');
        CTRL+C退出repl模式
      2)简单的了解一下,node.js运行模式。
       Node.js 所有的异步 I/O  操作在完成时都会发送一个事件到事件队列。
       
       Node.js 在什么时候会进入事件循环呢?答案是 Node.js  程序由事件循环开始,到事件循
       环结束,所有的逻辑都是事件的回调函数,所以 Node.js  始终在事件循环中,程序入口就是
       事件循环第一个事件的回调函数。事件的回调函数在执行的过程中,可能会发出 I/O  请求或
       直接发射(emit )事件,执行完毕后再返回事件循环,事件循环会检查事件队列中有没有未
       处理的事件,直到程序结束。
      3)阻塞模式:
       什么是阻塞(block)呢?线程在执行中如果遇到磁盘读写或网络通信(统称为 I/O  操作),
       通常要耗费较长的时间,这时操作系统会剥夺这个线程的 CPU  控制权,使其暂停执行,同
       时将资源让给其他的工作线程,这种线程调度方式称为 阻塞。当  I/O  操作完毕时,操作系统
       将这个线程的阻塞状态解除,恢复其对CPU 的控制权,令其继续执行。这种 I/O  模式就是通
       常的同步式 I/O (Synchronous I/O )或阻塞式 I/O  (Blocking I/O)。 
      4)异步io/非阻塞io
       异步式 I/O  (Asynchronous I/O)或非阻塞式 I/O  (Non-blocking I/O)则针对
       所有 I/O  操作不采用阻塞的策略。当线程遇到 I/O  操作时,不会以阻塞的方式等待 I/O  操作
       的完成或数据的返回,而只是将 I/O 请求发送给操作系统,继续执行下一条语句。当操作
       系统完成 I/O  操作时,以事件的形式通知执行 I/O  操作的线程,线程会在特定时候处理这个
       事件。为了处理异步 I/O ,线程必须有 事件循环,不断地检查有没有未处理的事件,依次予
       以处理。
      5)模块与包的管理:
       Node.js 提供了 require 函数来调用其他模块,而且模块都是基于文件的,机制十分简单。
       Node.js 提供了 exports   和  require  两个对象,
       其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获取模块的  exports  对象。
      例1: 
       //module.js
     
       var  name;
       
       exports.setName =  function (thyName) {
         name = thyName;
       };
       
       exports.sayHello = function () {
         console.log('Hello ' + name);
       };
       在同一目录下创建 getmodule.js ,内容是:
       //getmodule.js
       var  myModule = require('./module');  
       myModule.setName('BYVoid');
       myModule.sayHello();
      例2:
       有时候我们只是想把一个对象封装到模块中,例如:
       //hello.js
     
       function  Hello() {
         var  name;
         
         this.setName =  function (thyName) {
        name = thyName;
         };
         
         this.sayHello = function () {
        console.log('Hello ' + name);
         };
       };
       
       module.exports = Hello;
       
       //gethello.js
       
       var  Hello = require('./hello');
       
       hello =  new  Hello();
       hello.setName('BYVoid');
       hello.sayHello();
       事实上,exports  本身仅仅是一个普通的空对象,即 {} ,它专门用来声明接口,本质上是通过它为模块闭包的内部建立了一个有限的访问接口。
       Node.js 的包是一个目录,其中包含一个 JSON  格式的包说明文件 package.json 。严格符
       合 CommonJS 规范的包应该具备以下特征:
         package.json 必须在包的顶层目录下; 
         二进制文件应该在 bin  目录下; 
         JavaScript 代码应该在 lib  目录下; 
         文档应该在 doc  目录下; 
         单元测试应该在 test  目录下。
      
      
      6) http请求:
       a.连接:
        var http = require('http');
        //创建服务
        /*
        * @param request  请求
        * @param response 响应
        */
        http.createServer(function(request,response){
        //head头
        response.writeHead(200,{'Content-Type':'text/html'});
        response.write('<h1>this is song xiuxuan </h1>');
        //结束
        response.end('<p>hellow world</p>');
        
        }).listen(8080);
        console.info('HTTP server is listening  at port 8080');
       b.由于开启了8080事件监听,node.js的进程是不会断开的,也就是说修改代码后不会立即看到结果.
        
        所以要安装一个supervisor热布署:
         D: odejs>npm install -g supervisor
         npm http GET https://registry.npmjs.org/supervisor
         npm http 200 https://registry.npmjs.org/supervisor
         npm http GET https://registry.npmjs.org/supervisor/-/supervisor-0.5.5.tgz
         npm http 200 https://registry.npmjs.org/supervisor/-/supervisor-0.5.5.tgz
         C:Usersy400AppDataRoaming pm ode-supervisor -> C:Usersy400AppDataRoami
         ng pm ode_modulessupervisorlibcli-wrapper.js
         C:Usersy400AppDataRoaming pmsupervisor -> C:Usersy400AppDataRoaming p
         m ode_modulessupervisorlibcli-wrapper.js
         supervisor@0.5.5 C:Usersy400AppDataRoaming pm ode_modulessupervisor
  • 相关阅读:
    javascript 中加载图片大小与图片真是大小不一样解决方案
    连接数据库类
    jquery中“this”不同时刻的不同含义
    jquery中bind事件
    Sql中Output参数用法和分页存储过程
    C#中静态方法和静态变量的使用问题
    asp.net中javascript中json和C#对象之间的转换
    asp.net中加载自用户定义控件
    瀑布流布局——JS+绝对定位
    【笔记】——Javascript(1)
  • 原文地址:https://www.cnblogs.com/kaixincainiao/p/3415645.html
Copyright © 2011-2022 走看看