欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

NodeJS學(xué)習(xí)筆記之網(wǎng)絡(luò)編程

 更新時間:2014年08月03日 09:20:28   投稿:hebedich  
Node.js采用了Google Chrome瀏覽器的V8引擎,性能很好,同時還提供了很多系統(tǒng)級的API,如文件操作、網(wǎng)絡(luò)編程等。Node.js則是一個全面的后臺運(yùn)行時,為Javascript提供了其他語言能夠?qū)崿F(xiàn)的許多功能。今天我們來看下Nodejs的網(wǎng)絡(luò)編程

Node提供豐富的網(wǎng)絡(luò)編程模塊

Node模塊 協(xié)議
net TCP
dgram UDP
http HTTP
https HTTPS

TCP服務(wù)事件分為下面兩類

(1)、服務(wù)器事件

對于通過net.createServer()創(chuàng)建的服務(wù)器而言,它是一個EventEmitter實(shí)例,自定義事件有以下幾種:

listening :在調(diào)用listen()綁定端口或Domain Socket后觸發(fā),簡寫為server.listen(port, listener),通過第二個參數(shù)傳入。

connection :每個客戶端套接字連接到 服務(wù)器 時觸發(fā),簡潔寫法為通過net.createServer(),最后一個參數(shù)傳遞。

close :當(dāng)服務(wù)器關(guān)閉時觸發(fā),在調(diào)用server.close()后,服務(wù)器將停止接受新的套接字連接,但保持當(dāng)前存在的連接,等待所有連接斷開后,會觸發(fā)該事件。

error :當(dāng)服務(wù)器發(fā)生異常時,將會觸發(fā)該事件。

(2)、連接事件

服務(wù)器可以同時與多個客戶端保持連接,對于每個連接而言是典型的可寫可讀Stream對象。Stream對象可以用于服務(wù)端和客戶端之間的通信,既可以通過data事件從一端讀取另一端發(fā)來的數(shù)據(jù),也可以通過write()方法從一端向另一端發(fā)送數(shù)據(jù)。

data :當(dāng)一端調(diào)用write()發(fā)送數(shù)據(jù)時,另一端會觸發(fā)data事件,事件傳遞的數(shù)據(jù)就是write()發(fā)送的數(shù)據(jù)

end :當(dāng)連接中的任意一端發(fā)送FIN數(shù)據(jù)時,將會觸發(fā)該事件。

connect :該事件用于 客戶端 ,當(dāng)套接字與服務(wù)器連接成功時會觸發(fā)。

drain :當(dāng)任意一端調(diào)用write()發(fā)送數(shù)據(jù)時,當(dāng)前這端觸發(fā)該事件。

error :當(dāng)異常發(fā)送

close :當(dāng)套接字完全關(guān)閉時觸發(fā)

timeout :當(dāng)一定時間后連接不再活躍時,觸發(fā)該事件通知用戶該連接被閑置了。

TCP針對網(wǎng)絡(luò)中的小數(shù)據(jù)包有一定優(yōu)化策略:Nagle算法,當(dāng)數(shù)據(jù)達(dá)到一定量后才觸發(fā)。

UDP服務(wù)

UDP稱為用戶數(shù)據(jù)包協(xié)議,其不是面向連接的服務(wù)。Node中UDP只是一個EventEmitter實(shí)例,而非Stream的實(shí)例,具備以下自定義事件:

(1) message :當(dāng)UDP套接字監(jiān)聽網(wǎng)卡端口后,接受消息時觸發(fā),觸發(fā)攜帶的數(shù)據(jù)為消息Buffer對象和一個遠(yuǎn)程地址信息。

(2) listening :當(dāng)UDP套接字開始偵聽時觸發(fā)該事件。

(3) close :調(diào)用close()方法時觸發(fā)該事件,并不再觸發(fā)message事件。若需再次觸發(fā)message事件,需要重新綁定。

(4) error :當(dāng)異常發(fā)生時觸發(fā),若不監(jiān)聽直接拋出,使進(jìn)程退出。

HTTP服務(wù)

Node中http模塊繼承自tcp服務(wù)器(net模塊),它能與多個客戶端保持連接,由于其不為每個連接創(chuàng)建線程,保持很低的內(nèi)存占用,所以能實(shí)現(xiàn)高并發(fā)。HTTP服務(wù)和TCP服務(wù)區(qū)別在于,在開啟keepalive之后,一個TCP會話可以用于多次請求和響應(yīng)。TCP服務(wù)以connection為單位進(jìn)行服務(wù),HTTP服務(wù)以request單位進(jìn)行服務(wù)。http模塊是將connection到request的過程進(jìn)行封裝。

http模塊將連接所用的套接字的讀寫抽象為ServerRequest和ServerResponse對象,分別對應(yīng)請求和響應(yīng)操作。

(1) HTTP請求

對于TCP連接的讀操作,http模塊將其封裝為ServerRequest對象。如報(bào)頭部分req.method、req.url、req.headers,報(bào)文體數(shù)據(jù)部分抽象為一個只讀的流對象,若業(yè)務(wù)邏輯需要讀取報(bào)文體中的數(shù)據(jù),則需要這個數(shù)據(jù)流結(jié)束后才能進(jìn)行操作。

(2) HTTP響應(yīng)

HTTP響應(yīng)封裝了底層連接的寫操作,可以將其看成一個可寫的流對象。

響應(yīng)報(bào)文頭部信息方法:res.setHeader()和res.writeHeader()方法,可以多次setHeader進(jìn)行設(shè)置,但必須調(diào)用writeHeader寫入連接才生效。

報(bào)文體部分方法:res.write()和res.end()方法

(3) HTTP服務(wù)端事件

connection :客戶端與服務(wù)端建立TCP連接時,觸發(fā)一次connection事件

request :建立TCP連接后,http模塊底層將數(shù)據(jù)流中抽象出HTTP請求和HTTP響應(yīng),當(dāng)請求數(shù)據(jù)發(fā)送到服務(wù)端,在解析出HTTP請求頭后觸發(fā)該事件;在res.end()后,TCP連接可用于下一次請求。

close :調(diào)用server.close方法停止接收新的連接,已有的連接都斷開時觸發(fā)該事件。

checkContinue :某些客戶端在發(fā)送較大數(shù)據(jù)時,先發(fā)送一個頭部帶有Expect: 100-continue的請求到服務(wù)器,服務(wù)觸發(fā)該事件;

connect :當(dāng)客戶端發(fā)起CONNECT請求時觸發(fā)

upgrade :當(dāng)客戶端要求升級連接的協(xié)議時,需要和服務(wù)端協(xié)商,客戶端會在請求頭中帶上Updagrade字段

clientError :連接的客戶端發(fā)送錯誤,錯誤傳到服務(wù)端此時觸發(fā)該事件

(4) HTTP客戶端

http模塊提供http.request(options, connect),用于構(gòu)造HTTP客戶端。

HTTP客戶端和服務(wù)端類似,在ClientRequest對象中,它的事件叫做response,ClientRequest在解析響應(yīng)報(bào)文的時,一解析完響應(yīng)頭就觸發(fā)response事件,同時傳遞一個響應(yīng)對象ClientResponse供操作,后續(xù)響應(yīng)報(bào)文以只讀流的方式提供。

(5) HTTP客戶端事件

response :與服務(wù)端的request事件對應(yīng)的客戶端在請求發(fā)出后得到響應(yīng)時觸發(fā)該事件。

socket :當(dāng)?shù)讓舆B接池中建立的連接分配給當(dāng)前請求對象時觸發(fā);

connect :當(dāng)客戶端向服務(wù)器發(fā)送CONNECT請求時,若服務(wù)端響應(yīng)了200狀態(tài)碼,客戶端將會觸發(fā)該事件。

upgrade :客戶端享服務(wù)端發(fā)送Upgrade請求時,若服務(wù)端響應(yīng)了101 Switching Protocols狀態(tài),客戶端將會觸發(fā)該事件。

continue :客戶端向服務(wù)端發(fā)起Expect: 100-continue頭信息后,以試圖發(fā)送較大數(shù)據(jù),若服務(wù)端響應(yīng)100 continue狀態(tài),服務(wù)端將觸發(fā)該事件

WebSocket服務(wù)

WebSocket最早是作為HTML5重要特性出現(xiàn)的,相比HTTP有以下優(yōu)點(diǎn):

(1) 客戶端和服務(wù)端只建立一次TCP連接,可以使用更少的連接

(2) WebSocket服務(wù)端可以推送數(shù)據(jù)到客戶端,這遠(yuǎn)比HTTP請求響應(yīng)模式更靈活、更高效

(3) 更輕量級的協(xié)議頭,減少數(shù)據(jù)傳輸

Node中沒有內(nèi)置WebSocket的庫,但社區(qū)的ws模塊封裝了WebSocket的底層實(shí)現(xiàn)如著名的socket.io

相關(guān)文章

  • Node.js學(xué)習(xí)之查詢字符串解析querystring詳解

    Node.js學(xué)習(xí)之查詢字符串解析querystring詳解

    這篇文章主要給大家介紹了關(guān)于Node.js查詢字符串解析querystring的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用node.js具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-09-09
  • Node.js搭建Https服務(wù)過程詳解

    Node.js搭建Https服務(wù)過程詳解

    這篇文章主要為大家介紹了Node.js搭建Https服務(wù)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Node.js折騰記一:讀指定文件夾,輸出該文件夾的文件樹詳解

    Node.js折騰記一:讀指定文件夾,輸出該文件夾的文件樹詳解

    這篇文章主要介紹了Node.js讀指定文件夾輸出該文件夾文件樹,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • node微信開發(fā)之獲取access_token+自定義菜單

    node微信開發(fā)之獲取access_token+自定義菜單

    這篇文章主要介紹了node微信開發(fā)之獲取access_token+自定義菜單,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 詳解KOA2如何手寫中間件(裝飾器模式)

    詳解KOA2如何手寫中間件(裝飾器模式)

    這篇文章主要介紹了詳解KOA2如何手寫中間件(裝飾器模式),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • yarn?install命令報(bào)錯warning?package-lock.json?found解決辦法

    yarn?install命令報(bào)錯warning?package-lock.json?found解決辦法

    這篇文章主要給大家介紹了關(guān)于yarn?install命令報(bào)錯warning?package-lock.json?found的解決辦法,文中通過圖文將解決的辦法介紹的非常詳細(xì),還分享了更多yarn install遇到的報(bào)錯及解決方案,需要的朋友可以參考下
    2024-02-02
  • Grunt針對靜態(tài)文件的壓縮,版本控制打包的實(shí)例講解

    Grunt針對靜態(tài)文件的壓縮,版本控制打包的實(shí)例講解

    下面小編就為大家?guī)硪黄狦runt針對靜態(tài)文件的壓縮,版本控制打包的實(shí)例講解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • nodejs中使用worker_threads來創(chuàng)建新的線程的方法

    nodejs中使用worker_threads來創(chuàng)建新的線程的方法

    這篇文章主要介紹了nodejs中使用worker_threads來創(chuàng)建新的線程的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • 詳解node.js平臺下Express的session與cookie模塊包的配置

    詳解node.js平臺下Express的session與cookie模塊包的配置

    本篇文章主要介紹了詳解node.js平臺下Express的session與cookie模塊包的配置,具有一定的參考價值,有興趣的可以了解一下。
    2017-04-04
  • Express本地測試HTTPS的示例代碼

    Express本地測試HTTPS的示例代碼

    這篇文章主要介紹了Express本地測試HTTPS的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06

最新評論