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的第五天学习笔记的更多相关文章
- 《Linux内核设计与实现》课本第五章学习笔记——20135203齐岳
<Linux内核设计与实现>课本第五章学习笔记 By20135203齐岳 与内核通信 用户空间进程和硬件设备之间通过系统调用来交互,其主要作用有三个. 为用户空间提供了硬件的抽象接口. 保 ...
- 《Linux内核设计与实现》第五章学习笔记
<Linux内核设计与实现>第五章学习笔记 姓名:王玮怡 学号:20135116 一.与内核通信 在Linux中,系统调用是用户空间访问内核的唯一手段:除异常和陷入外,它们是内核 ...
- 《Linux内核分析》第五周学习笔记
<Linux内核分析>第五周学习笔记 扒开系统调用的三层皮(下) 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.c ...
- 20165326 java第五周学习笔记
第五周学习笔记 ch7 内部类(&外嵌类) 内部类的类体不可以声明类变量和方法 内部类如同类的变量或方法 内部类和外嵌类在编译时生成两个class文件 匿名类 某个类的一个子类没有明显的用类声 ...
- linux内核分析第五周学习笔记
linux内核分析第五周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
- Spring实战第五章学习笔记————构建Spring Web应用程序
Spring实战第五章学习笔记----构建Spring Web应用程序 Spring MVC基于模型-视图-控制器(Model-View-Controller)模式实现,它能够构建像Spring框架那 ...
- 安卓权威编程指南 - 第五章学习笔记(两个Activity)
学习安卓编程权威指南第五章的时候自己写了个简单的Demo来加深理解两个Activity互相传递数据的问题,然后将自己的学习笔记贴上来,如有错误还请指正. IntentActivityDemo学习笔记 ...
- HTML第五天学习笔记
今天先是学习了基础的css样式 <html> <head> <title></title> <meta http-equiv = "co ...
- nodejs的第四天学习笔记
一. ECMAScript6(es2015)es6语法 es6/es2015,在es5的基础上扩展了很多新的功能,我们要学习仅仅是es6中的部分常用新功能,这些功能在使用的时候一定要慎重,因为他们之中 ...
随机推荐
- 利用selector设置ImageButton不同状态下的背景图片
1.自定义MyButton类 public class MyButton extends Button { //This constructormust be public MyButton(Cont ...
- ssh免密码认证
举例:有机器PC_A(172.0.246),PC_B(172.0.1.140).现想A通过ssh免密码登录到B. 1.在PC_A主机下生成公钥/私钥对 [comodo@PC_A ~]$ ssh-key ...
- 夺命雷公狗----Git---1---安装步骤
除了上面的路径修改一下,别的都用默认的问题即可解决.....
- 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 ...
- CSS3 笔记五(Buttons)
Some examples 1> Input width animation Search: Code <!DOCTYPE html> <html> <head&g ...
- centos7配置静态ip后仍然显示动态ip
我在虚拟机上安装了CentOS7操作系统,将 /etc/sysconfig/network-scripts/ifcfg-eth0 文件配置静态 IP 为192.168.1.210,如图1: 然后我用 ...
- mha配置参数详解
mha配置参数详解: 参数名字 是否必须 参数作用域 默认值 示例 hostname Yes Local Only - hostname=mysql_server1, hostname=192.168 ...
- Java读取文件最后两行
File f=new File("C:\\123.txt"); BufferedReader br = new BufferedReader(new FileReader(f)); ...
- Fuel UX wizard example
<!DOCTYPE html> <html class="no-js fuelux"> <head> <meta charset=&quo ...
- python 随机生成固定长度的字串
from random import Random#随机生成4到20位的用户名def random_username(): username = '' chars = 'AaBbCcDdEeFfGgH ...