Node.js基礎(chǔ)(一)

參考鏈接:Node.js 概述 -- JavaScript 標(biāo)準(zhǔn)參考教程(alpha)

url部分參考鏈接:node.js之Url & QueryString模塊 - 簡書

HTTP:HTTP知識先填坑-慕課網(wǎng)

HTTP協(xié)議在使用場景中的流程流程流程流程流程

1.首先,是對imooc.com域名解析,

(1.1)瀏覽器搜索瀏覽器自身的DNS緩存。

在Chrome瀏覽器下,通過chrome://net-internals/#dns就可以查看你曾經(jīng)瀏覽過的網(wǎng)站DNS緩存記錄。

(1.2)如果瀏覽器沒有找到自身的DNS緩存或之前的緩存已失效,那么瀏覽器會搜索操作系統(tǒng)自身的DNS緩存。

(1.3)如果操作系統(tǒng)的DNS緩存也沒有找到,那么系統(tǒng)會嘗試在本地的HOST文件去找。(HOST文件:C:\Windows\System32\drivers\etc)

(1.4)如果在HOST里依然沒有找到,瀏覽器會發(fā)起一個DNS的系統(tǒng)調(diào)用,即一般向本地的寬帶運營商發(fā)起域名解析請求。請求分為以下步驟,1.寬帶運營商服務(wù)器會首先查看自身的緩存,看是否有結(jié)果,如果沒有,2.運營商服務(wù)器會發(fā)起一個迭代DNS解析請求【根域(獲得com域頂級域IP地址)——>頂級域(獲得imooc.com域的IP地址)——>域名注冊商(將結(jié)果發(fā)給運營商的DNS服務(wù)器)】。運營商服務(wù)器把結(jié)果返回給操作系統(tǒng)內(nèi)核(同時也緩存在自己的緩存區(qū)),操作系統(tǒng)內(nèi)核把結(jié)果返回給瀏覽器,最終瀏覽器拿到了www.imooc.com對于的IP地址,DNS解析完成。

2.瀏覽器獲得域名對應(yīng)的IP地址后,發(fā)起HTTP“三次握手”,建立TCP/IP連接。(瀏覽器以一個隨機端口向服務(wù)器的Web程序發(fā)起TCP連接請求,TCP連接請求通過層層的路由設(shè)備到達了服務(wù)器端以后進入了網(wǎng)卡,再進入內(nèi)核的TCP/IP協(xié)議棧,還可能經(jīng)過防火墻的過濾,最終進入了Web服務(wù)器,建立TCP和IP的連接。)

3.在TCP/IP連接建立起來后,瀏覽器就可以向服務(wù)器發(fā)送HTTP請求了。比如,用HTTP的GET方法請求一個根域里的某個域名,協(xié)議可以采用HTTP 1.0 。

4.服務(wù)器端接受這個請求,根據(jù)路徑參數(shù),經(jīng)過后端的一些處理之后,把處理后的一個結(jié)果的數(shù)據(jù)返回給瀏覽器,如果是imooc.com網(wǎng)站的頁面,服務(wù)器就會把完整的HTML頁面代碼返回給瀏覽器。

5.瀏覽器拿到了imooc.com這個網(wǎng)站的完整HTML頁面代碼,在解析和渲染這個頁面的時候,里面的Javascript、CSS、圖片等靜態(tài)資源,它們同樣也是一個個HTTP請求,都需要經(jīng)過上面的步驟來獲取。

6.瀏覽器根據(jù)拿到的資源對頁面進行渲染,最終把一個完整的頁面呈現(xiàn)出來。

HTTP請求流程可拆分為:請求和響應(yīng),兩者都會發(fā)送http頭和正文信息。HTTP頭發(fā)送的是一些附加的信息:內(nèi)容類型,服務(wù)器發(fā)送響應(yīng)的日期、HTTP狀態(tài)碼。

HTTP狀態(tài)碼:HTTP 狀態(tài)消息

HTTP模塊:①支持更多特性②不緩沖請求和響應(yīng)③處理流相關(guān)

HTTP概念進階:

1. 什么是回調(diào)?

什么是回調(diào)?回調(diào)是異步編程的基礎(chǔ)方法,當(dāng)需要按照順序執(zhí)行異步邏輯的時候,一般采取后續(xù)傳遞的方式,也就是將后續(xù)邏輯封裝在回調(diào)函數(shù)中作為起始函數(shù)的參數(shù),逐層去嵌套。

2. 什么是同步/異步?

同步就是執(zhí)行一個任務(wù),后一個任務(wù)等待前一個任務(wù)結(jié)束,然后再執(zhí)行,程序執(zhí)行的順序與任務(wù)的排列順序是一致的,比如js是單線程的,因此js代碼是按照順序執(zhí)行的,即便是js同步下載多個文件,也得按照順序執(zhí)行,一旦js里面出現(xiàn)死循環(huán)的代碼,那么頁面就會被阻塞在這個地方,后面的js代碼就不會被執(zhí)行到 比如打電話預(yù)約座位,發(fā)現(xiàn)沒有座位了,店員就掛電話開始查找有沒有座位,查找,查找...等待一會兒之后,店員告訴你結(jié)果后,掛電話。

異步執(zhí)行任務(wù),每個任務(wù)都有一個或多個回調(diào)函數(shù),前一個任務(wù)結(jié)束后不是執(zhí)行后一個任務(wù)而是執(zhí)行回調(diào)函數(shù),后一個任務(wù)也不是等待前一個任務(wù)結(jié)束后執(zhí)行,程序的執(zhí)行順序與任務(wù)的排列順序無關(guān)。JS中最基本的異步函數(shù)就是setTimeout和setInterval。比如打電話預(yù)約座位,發(fā)現(xiàn)沒有座位了,店員就掛電話開始查找有沒有座位,查找,查找...查到之后,店員通過主動回電話。即執(zhí)行回調(diào)函數(shù)來解決你的問題(是否有座位)。

3. 什么是I/O?

磁盤的寫和讀,在nodejs里面就是為文件系統(tǒng),數(shù)據(jù)庫資源提供接口,發(fā)送請求的時候,不用等待硬盤,當(dāng)硬盤準(zhǔn)備好了,非阻塞接口就會通知處理

4. 什么的單線程/多線程?

一次只能執(zhí)行某一段代碼叫做單線程

一次可以執(zhí)行多段代碼叫多線程,只要可以分配好資源

5. 什么是阻塞/非阻塞?

阻塞:某個程序執(zhí)行時,未執(zhí)行完就得一直等待

非阻塞:前一個程序未執(zhí)行完時可以掛起,繼續(xù)執(zhí)行其他程序,等到前一個程序有結(jié)果再執(zhí)行

6. 什么是事件?

一個觸發(fā)動作(例如點擊按鈕)

7. 什么是事件驅(qū)動?

為了某個事件注冊了回調(diào)函數(shù),但這個回調(diào)函數(shù)不是馬上執(zhí)行,只有當(dāng)這個事件發(fā)生的時候才會調(diào)用回調(diào)函數(shù),這種函數(shù)執(zhí)行的方式就叫事件驅(qū)動。也可以說是一個觸發(fā)動作引起的操作(例如點擊按鈕后彈出一個對話框)

8. 什么是基于事件驅(qū)動的回調(diào)?

為了某個事件注冊了回調(diào)函數(shù),但是這個回調(diào)函數(shù)不是馬上執(zhí)行,只有當(dāng)事件發(fā)生的時候,才會調(diào)用回調(diào)函數(shù),這種函數(shù)執(zhí)行的方式叫做事件驅(qū)動~這種注冊回調(diào)就是基于事件驅(qū)動的回調(diào),如果這些回調(diào)和異步I/O(數(shù)據(jù)寫入、讀取)操作有關(guān),可以看作是基于回調(diào)異步I/O,只不過這種回調(diào)在nodejs中是有事件來驅(qū)動的

9. 什么是事件循環(huán)?

//事件循環(huán)Eventloop,倘若有大量的異步操作,一些I/O的耗時操作,甚至是一些定時器控制的延時操作,它們完成的時候都要調(diào)用相應(yīng)的回調(diào)函數(shù),從而來完成一些密集的任務(wù),而又不會阻塞整個程序執(zhí)行的流程,此時需要一種機制來管理,這種機制叫做事件循環(huán).

Event Loop:回調(diào)函數(shù)隊列。當(dāng)異步函數(shù)執(zhí)行的時候回調(diào)函數(shù)就會被壓入到這個隊列,對node.js來說,靠一個單線程不斷地查詢隊列中是否有事件,當(dāng)讀取到一個事件的時候,將調(diào)取與這個事件關(guān)聯(lián)的javascript函數(shù)。

如圖,堆(heap)和棧(stack),棧中的代碼調(diào)用各種外部API,它們在"任務(wù)隊列"中加入各種事件(click,load,done)。只要棧中的代碼執(zhí)行完畢,主線程就會去讀取"任務(wù)隊列",依次執(zhí)行那些事件所對應(yīng)的回調(diào)函數(shù)。

node.js的核心思想非阻塞,單線程,和事件驅(qū)動。

HTTPS:https協(xié)議是在http基礎(chǔ)之上加入了SSL/TLS握手以及數(shù)據(jù)加密傳輸,SSL/TLS是他們的最大區(qū)別。




最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.幾種基本數(shù)據(jù)類型?復(fù)雜數(shù)據(jù)類型?值類型和引用數(shù)據(jù)類型?堆棧數(shù)據(jù)結(jié)構(gòu)? 基本數(shù)據(jù)類型:Undefined、Nul...
    極樂君閱讀 5,878評論 0 106
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,586評論 19 139
  • 個人博客搭建完成,歡迎大家來訪問哦黎默丶lymoo的博客 什么是node.js JavaScript是一個腳本語言...
    黎默丶lymoo閱讀 479評論 0 4
  • 3.1Node.js的控制臺 ②第二個參數(shù)是一個整數(shù)表示時間。 ③第三個參數(shù)表示將要傳入被調(diào)函數(shù)的參數(shù)。 clea...
    同Young不同樣閱讀 357評論 0 2
  • 2017.09.15 每天都在循規(guī)蹈矩的過著,重復(fù)著昨天做過的事,一遍又一遍 大概這個年紀真的是人生的迷茫期吧,不...
    兜兜w閱讀 294評論 0 0

友情鏈接更多精彩內(nèi)容