一、调试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. JAVA基本类库介绍

    我们曾经讲过,Java已经为编程者编制了许多类,这些类已经经过测试,基本上不存在错误,这些类都是我们编程的基础.如果不利用这些已存在的类,我们的 编程工作将变得异常复杂,所以我们应尽可能多的掌握Jav ...

  2. Alwayson 与 mirror

    --将主副本改为同步模式和自动故障转移,将其中一个辅助副本改为同步辅助副本和自动故障转移 USE [master]GOALTER AVAILABILITY GROUP [TESTDB5AG]MODIF ...

  3. EF Core 1.0 和 SQLServer 2008 分页的问题

    EF Core 1.0 在sqlserver2008分页的时候需要指定用数字分页. EF Core1.0 生成的分页语句中使用了 Featch Next.这个语句只有在SqlServer2012的时候 ...

  4. 物理引擎-Physx的源代码去哪里找

    前几天无意中看到了Physx开源了,就连自己的领导也高兴了一下,让本道士去下载源代码琢磨一下,顺便做几个例子跑起来.结果没成想这个nvidia的github上的源代码被移除了,而且csdn,pudn上 ...

  5. vim如何配置go语言环境

    go语言没有如source insight般优秀的编辑器,试用了多种,vim算最好的,其次可以用liteide(有反查变量函数引用点.修改行变色功能),两者可配合使用. 更新:最好的是idea+go插 ...

  6. Dynamics AX 2012 的工业物联网解决方案

    Dynamics AX 2012 的工业物联网解决方案 物联网 物联网的概念在这两年非常火,包括近期很火的共享单车初创公司--摩拜单车,在产品中运用了Azure Iot物联网技术.但是,物联网并不是一 ...

  7. yii2框架增删改查案例

    //解除绑定蓝牙 //http://www.520m.com.cn/api/pet/remove-binding?healthy_id=72&pet_id=100477&access- ...

  8. 采用重写tostring方法使ComboBox显示对象属性

    当ComboBox中添加的是对象集合的时候,如果运行就会发现显示是的命令空间.类名,而如果我们想显示对象属性名的时候,我们就可以在对象类中重写object基类中的tostring方法.

  9. 【HDU2255】奔小康赚大钱-KM算法

    Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description ...

  10. linux 调用java main方法

    #!/bin/shexport LANG=zh_CNtimestamp=`date +%Y%m%d%H%M`/opt/java6/bin/java -Xms128m -Xmx512m -Dfile.e ...