一、调试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的第五天学习笔记的更多相关文章

  1. 《Linux内核设计与实现》课本第五章学习笔记——20135203齐岳

    <Linux内核设计与实现>课本第五章学习笔记 By20135203齐岳 与内核通信 用户空间进程和硬件设备之间通过系统调用来交互,其主要作用有三个. 为用户空间提供了硬件的抽象接口. 保 ...

  2. 《Linux内核设计与实现》第五章学习笔记

    <Linux内核设计与实现>第五章学习笔记 姓名:王玮怡  学号:20135116 一.与内核通信     在Linux中,系统调用是用户空间访问内核的唯一手段:除异常和陷入外,它们是内核 ...

  3. 《Linux内核分析》第五周学习笔记

    <Linux内核分析>第五周学习笔记 扒开系统调用的三层皮(下) 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.c ...

  4. 20165326 java第五周学习笔记

    第五周学习笔记 ch7 内部类(&外嵌类) 内部类的类体不可以声明类变量和方法 内部类如同类的变量或方法 内部类和外嵌类在编译时生成两个class文件 匿名类 某个类的一个子类没有明显的用类声 ...

  5. linux内核分析第五周学习笔记

    linux内核分析第五周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  6. Spring实战第五章学习笔记————构建Spring Web应用程序

    Spring实战第五章学习笔记----构建Spring Web应用程序 Spring MVC基于模型-视图-控制器(Model-View-Controller)模式实现,它能够构建像Spring框架那 ...

  7. 安卓权威编程指南 - 第五章学习笔记(两个Activity)

    学习安卓编程权威指南第五章的时候自己写了个简单的Demo来加深理解两个Activity互相传递数据的问题,然后将自己的学习笔记贴上来,如有错误还请指正. IntentActivityDemo学习笔记 ...

  8. HTML第五天学习笔记

    今天先是学习了基础的css样式 <html> <head> <title></title> <meta http-equiv = "co ...

  9. nodejs的第四天学习笔记

    一. ECMAScript6(es2015)es6语法 es6/es2015,在es5的基础上扩展了很多新的功能,我们要学习仅仅是es6中的部分常用新功能,这些功能在使用的时候一定要慎重,因为他们之中 ...

随机推荐

  1. 利用selector设置ImageButton不同状态下的背景图片

    1.自定义MyButton类 public class MyButton extends Button { //This constructormust be public MyButton(Cont ...

  2. ssh免密码认证

    举例:有机器PC_A(172.0.246),PC_B(172.0.1.140).现想A通过ssh免密码登录到B. 1.在PC_A主机下生成公钥/私钥对 [comodo@PC_A ~]$ ssh-key ...

  3. 夺命雷公狗----Git---1---安装步骤

    除了上面的路径修改一下,别的都用默认的问题即可解决.....

  4. Unable to make the session state request to the session state server处理

    Server Error in '/' Application. Unable to make the session state request to the session state serve ...

  5. CSS3 笔记五(Buttons)

    Some examples 1> Input width animation Search: Code <!DOCTYPE html> <html> <head&g ...

  6. centos7配置静态ip后仍然显示动态ip

    我在虚拟机上安装了CentOS7操作系统,将 /etc/sysconfig/network-scripts/ifcfg-eth0 文件配置静态 IP 为192.168.1.210,如图1: 然后我用 ...

  7. mha配置参数详解

    mha配置参数详解: 参数名字 是否必须 参数作用域 默认值 示例 hostname Yes Local Only - hostname=mysql_server1, hostname=192.168 ...

  8. Java读取文件最后两行

    File f=new File("C:\\123.txt"); BufferedReader br = new BufferedReader(new FileReader(f)); ...

  9. Fuel UX wizard example

    <!DOCTYPE html> <html class="no-js fuelux"> <head> <meta charset=&quo ...

  10. python 随机生成固定长度的字串

    from random import Random#随机生成4到20位的用户名def random_username(): username = '' chars = 'AaBbCcDdEeFfGgH ...