首页 > 代码库 > nodejs的第五天学习

nodejs的第五天学习

一、调试nodejs代码

  1)使用console.log()

    使用麻烦,用了以后还要删除

  2)nodejs的自带调试器

    -node debug a.js

    没有任何作用,一个玩具,将来有一天可以会变得强大的

  3)使用visual stdio code调试:

  步骤:

    a)安装vsCode,并且通过vscode打开要调试的文件所在的文件夹

    b)点击F5,选择nodejs的打开方式,这时vsCode会打开一个lanuch.json,修改其中"program"属性,改为"${workspaceRoot}/文件名.js",

    c)可以查看文件的五个全局对象以及添加监控文件中变量的值

  4)使用webstorm调试

 

二、 nodejs的特点

nodejs两大特点:非阻塞I/O和事件驱动

     2.1非阻塞I/O模型

     什么叫非阻塞I/O模型:

   在nodejs中操作文件时有同步和异步之分

     同步的特点是:

    当使用nodejs去读取文件时,如果文件过大,读取的时候时间过长,这个时候nodejs程序不会继续执行下面的代码,而是等文件读取完以后才会执行下面的代码。这种读取文件方式我们叫做阻塞式I/O模型。

    缺点:当代码执行到读取文件操作的代码后下面代码不会被执行,程序处于“卡死”状态。大量的时间消耗在了等待中,严重消耗效率。

   异步的特点是:

    当使用nodejs去读取文件时,如果文件过大,就让程序分两个部分来工作:一个部分继续去读取文件,另一个部分继续执行下面的程序。这种方式来读取文件的话,既不会影响文件的读取,又不会影响下面代码的执行。这种文件读取文件的方式我们叫做非阻塞式I/O模型。

 

     2.2事件驱动:程序的设计思想(过程驱动)

        什么叫事件驱动?

以操作系统为例,最早的操作系统操作模式为:

输入------> 执行 ------> 输出

像这种整个操作流程都是程序员事先设置好的,我们只能够按照既定的方式去操作程序的设计思想,我们把它叫做过程驱动。

缺点:程序设计方法是面向程序而不是面向用户的,交互性差,用户界面不够友好,因为它强迫用户按照某种不可更改的模式进行工作。用户每次操作后都要等待程序执行成完成才能执行其它操作。

现在主流的操作系统模式为:

通过鼠标的点击或者键盘的输入,执行对应的功能

像这种通过一个操作,程序执行对应的功能,我们把这种操作叫事件。比如:鼠标的点击事件,键盘的输入事件。像这种系统的操作都是由事件控制的设计思想我们叫做事件驱动

优点:它是一种“被动”式程序设计方法。程序开始运行后,处于等待用户输入事件状态,程序每个事件触发后,取得事件并作出相应反应,处理完毕又返回并处于等待事件状态。

 

在nodejs中的表现:nodejs也是以事件驱动来设计的,例如:通过nodejs的fs核心模块给文件设置一个监听事件,文件就处于补监听状态了,一旦文件被修改了,就会触发监听设置的回调函数,当回调函数处理完毕后返回监听状态,并处于等待事件状态。所以将来只要设置一个事件,只要满足事件的触发的条件,事件就会执行,执行以后再回到等待事件状态。

nodejs给程序设置事件的语法:例
    fs.on(“end”,function(){})。
       on(“readable”)
       on(“data”)

       on(“end”)

 

 

     2.3事件驱动的应用

由于淘宝服务器在任何时候都可能被用户访问到,为了防止请求被遗漏,淘宝的服务器需要开启一个监听事件,而这个监听事件应该满足的状态是:如果有请求过来,服务器就处理请求,如果没有请求过来,服务器就等待请求。而这个特点就是事件驱动的核心思想。    

 

三、 socket网络编程

什么是socket:网络通过通讯中起到关键作用的就是socket,socket是连接浏览器与服务器的桥梁。也就是说浏览器之所以能够连接服务器是因为浏览器中有socket帮助浏览器传递数据,而服务器之所以能够接接收浏览器的请以及响应信息给浏览器,也是因为服务器中的socket帮助服务器接收和传递数据。

所以如果想要搭建一台服务器,必须学习socket。而如果要学好socket必须了解:ip地址和端口号。

 

1.1  IP地址

特点:

  • Internet中的主机如果想要与另一台进行通信,必须要有自己的ip地址。ip地址是每台电脑在互联网上的唯一标识。
  • ip地址分为32位(ipv4)和64位(ipv6);现在一般用的是ipv4

同一电脑有多个ip地址:

  1)本机ip地址:127.0.0.1 (或者是“::0”)又叫本地回环。

自己电脑上的浏览器访问自己电脑上的服务器使用的ip

  2)局域网ip地址:192.168.112.10

局域网中区别其它电脑的ip地址

  3)外网ip地址:233.124.102.11

每个电脑在互联网世界中的唯一标识(查看自己的外网ip网址:ip138.com)

 

1.2  端口号

    端口号的作用:区别应用程序,每个应用程序打开后会占用电脑的一个端口号,将来接收到数据以后如果要交给某个应用程序去处理,只需要找到这个应用程序对应的端口号就行了。所以端口号的应用就是用来给计算器上的每个应用程序加一个标识。

    端口号的特点:

      多个软件不能用同一个端口,否则软件不能正常打开。

      端口号的范围是:0~65535,一般0~1023是系统给自己预留的,程序员一般不能指定。

    常用端口:

      80:HTTP服务器

      21:FTP(文件传输)

      443:HTTPS服务器

      3389:window远程桌面登录

      25:smtp邮件发送协议

      110:pop3邮件接收协议

 

1.3  socket

如果两个人需要通话需要两部手机,而两台电脑如果要通讯需要两个sorcket。手机有自己的电话号码。sorcket一样也要有自己的”电话号码”:ip + 端口号。将来nodejs开启服务器以后,其它浏览器(客户端)如果要访问,必须通过sorcket建立连接。如果要学习如何建立连接,需要学习nodejs中的一个核心模块Net模块。

 

四、net 的核心模块

     4.1 使用net创建一个服务器的步骤

     第一步:

  创建一个服务器对象:

  方式一:var socketServer = net.createServer();//建议第一种

   方式二:var socketServer = new net.server();

 

  第二步:

    给socketServer开启一个监听事件:connection

    socketServer .on(“connection”,(socket)=>{});

  第三步:

    监听端口:

    socketServer.listen(端口号,ip地址);

 

     4.2 使用net创建一个客户端的步骤

     第一步:

    设置要连接的服务器的ip和端口号

    let ip = ‘ip地址’;

    Let port = 8080;

  第二步:

    连接服务器:

    Let socket = net.createConnection(prot,ip,()=>{});

  第三步:

    接收来自服务器的数据

    Socket.on(“data”,(content)=>{})

 

注意点:如果打开多个客户端,每个客户端有自己的端口号,并且每个客户端的socket对象都不一样。可以利用这个特点做一个小型的聊天室,让一个有客户端通过服务器发送信息到另一个客户端。

 

4.3    完善服务器

  1)在服务器端得到所有客户端的信息:

    socket.remoteAddress://得到客户端的ip地址

    socket.remotePort();//得到客户端的端口号

  2)当客户端下线时会报错:

    加入一个error处理事件就可以了

nodejs的第五天学习