一、调试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处理事件就可以了