Node.js(六)——HTTP概念进阶

在上面的步骤中扫通了http请求到结束的一个闭环包括请求时的头信息、响应时候服务器返回的头信息,状态码等等

成都创新互联长期为1000多家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为霍山企业提供专业的成都网站制作、成都网站设计,霍山网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制开发。

这些在Node http模块中都能获取到并且有相应的接口去组装这些信息和返回它们,同时呢这些http接口在设计的时候就考虑了可以支持许多可以支持http协议的特性

而这些特性在传统的开发中却很难使用,比如大字节的块编码消息

为了让用户在请求和响应的时候使用流的形式操作数据接口缓存整个请求或者响应,整套http api都很底层,它只处理流之间的操作以及信息解析

可以把信息解析为请求头和请求体,但不去解析实际的请求头和请求正文里面的具体内容

这个就是关于NodeJs中http模块的介绍

什么是回调?

回调是异步编程最基本的方法,对于NodeJs来说,需要按顺序执行异步逻辑的时候,一般采取后续传递的方式,也就是将后续逻辑封装在回调函数中作为起始函数的参数,逐层去嵌套 通过这种方式来让程序按照我们所期望的方式走完流程

案例如下:

声明一个learn函数

function learn(something){
	console.log(something)
}

然后再声明个we函数,两个参数

第一个是回调callback,便于理解

function we(callback,something){
	something += ' is cool'
	callback(something)
}

最后来调用

we(learn,'Nodejs')

执行结果如下:

Node.js(六)——HTTP概念进阶

这种是叫做具名函数(具体有名字的函数)

还有一种是匿名函数,直接调用如下:

we(function(something){
	console.log(something)
},'Jade')

执行结果如下:

Node.js(六)——HTTP概念进阶

什么是同步/异步?

对于异步对立就是同步,同步就是执行一个任务,后一个任务等待前一个任务结束,然后再执行。

程序的执行顺序与任务的排列顺序是一致的,浏览器端的js是单线程的,因此js代码只能按顺序执行,即便是js可以并行的去下载但也只能按顺序执行,

如果某个js内有比较耗时的操作,那么页面就会被阻塞,后面的js代码就不会被执行到

比如说一个页面里面有3个js引入

// 
// 
// 
b.js代码如下
var i = 0
while(true){
	i++
}

此js就会被一直阻塞在这里。

异步的模式则完全不同

每个任务都有一个或多个回调函数,前一个任务结束之后不是执行后一个任务,而是执行回调函数,后一个任务也不是等待前一个任务结束就执行任务的执行顺序与排列顺序是不一致的,是异步 的

在JavaScript中最基础的异步函数则是setTimeout和setinterval

setTimeout会在给定的时间结束后执行给定的函数,接受一个回调函数作为第一个参数

代码如下——顺序执行(第一版):

var c = 0

function printIt(){
	console.log(c)
}

function plus(){
	c +=1
}

plus()
printIt()

结果毋庸置疑是:1

结果如下:

Node.js(六)——HTTP概念进阶

如果在plus中有些异步的操作或者比较耗时的操作,那这个时候就不一定

能拿到我们所期望的结果,加个setTimeout,然后再执行,那么能拿到什么样的结果呢?

代码如下——阻塞执行(第二版):

var c = 0

function printIt(){
	console.log(c)
}

function plus(){
	setTimeout(function(){
		c +=1
	},1000)
}

plus()
printIt()

执行结果如下:

Node.js(六)——HTTP概念进阶

这就不是我们所期望的那个1

那这个时候怎么办呢?

可以把plus方法改造一下,传递一个回调函数,然后再setTimeout里面调用回调函数,

然后把结果传递下去,最后把printIt作为参数传递给plus

代码如下——顺序执行(第一版):

var c = 0

function printIt(){
	console.log(c)
}

function plus(callback){
	setTimeout(function(){
		c +=1
		callback(c)
	},1000)
}

plus(printIt)

执行结果如下:

Node.js(六)——HTTP概念进阶

最后打印出了我们所期望的结果:就是1

什么是I/O?

磁盘的写入和读取在NodeJs里,本身呢就是为文件系统、数据库之类的资源提供接口,

向文件系统发送一个请求的时候,不用等待硬盘,等硬盘准备好了之后,非阻塞接口会通知到NodeJs

什么是单线程/多线程?

单线程对应的就是多线程

单线程:程序的功能按照顺序来执行,只有前面的流程都执行成功以后,

后面的流程才能被执行到

单线程特点:安全

各有优缺点,多线程就是要把握好资源调配

什么是阻塞/非阻塞?

什么是事件?

什么是事件驱动?

什么是基于事件驱动的回调?

什么是事件循环?


网站题目:Node.js(六)——HTTP概念进阶
标题链接:http://cdiso.cn/article/ishpjs.html

其他资讯