溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Node.js(六)——HTTP概念進階

發布時間:2020-06-10 15:26:33 來源:網絡 閱讀:716 作者:mazongfei 欄目:web開發

在上面的步驟中掃通了http請求到結束的一個閉環包括請求時的頭信息、響應時候服務器返回的頭信息,狀態碼等等

這些在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引入

// <script src='a.js'></script>
// <script src='b.js'></script>
// <script src='c.js'></script>
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


什么是單線程/多線程?

單線程對應的就是多線程

單線程:程序的功能按照順序來執行,只有前面的流程都執行成功以后,

后面的流程才能被執行到

單線程特點:安全

各有優缺點,多線程就是要把握好資源調配


什么是阻塞/非阻塞?



什么是事件?

什么是事件驅動?

什么是基于事件驅動的回調?

什么是事件循環?



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女