DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> NodeJS學習筆記之網絡編程
NodeJS學習筆記之網絡編程
編輯:關於JavaScript     

Node提供豐富的網絡編程模塊

Node模塊 協議 net TCP dgram UDP http HTTP https HTTPS

TCP服務事件分為下面兩類

(1)、服務器事件

對於通過net.createServer()創建的服務器而言,它是一個EventEmitter實例,自定義事件有以下幾種:

listening :在調用listen()綁定端口或Domain Socket後觸發,簡寫為server.listen(port, listener),通過第二個參數傳入。

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

close :當服務器關閉時觸發,在調用server.close()後,服務器將停止接受新的套接字連接,但保持當前存在的連接,等待所有連接斷開後,會觸發該事件。

error :當服務器發生異常時,將會觸發該事件。

(2)、連接事件

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

data :當一端調用write()發送數據時,另一端會觸發data事件,事件傳遞的數據就是write()發送的數據

end :當連接中的任意一端發送FIN數據時,將會觸發該事件。

connect :該事件用於 客戶端 ,當套接字與服務器連接成功時會觸發。

drain :當任意一端調用write()發送數據時,當前這端觸發該事件。

error :當異常發送

close :當套接字完全關閉時觸發

timeout :當一定時間後連接不再活躍時,觸發該事件通知用戶該連接被閒置了。

TCP針對網絡中的小數據包有一定優化策略:Nagle算法,當數據達到一定量後才觸發。

UDP服務

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

(1) message :當UDP套接字監聽網卡端口後,接受消息時觸發,觸發攜帶的數據為消息Buffer對象和一個遠程地址信息。

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

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

(4) error :當異常發生時觸發,若不監聽直接拋出,使進程退出。

HTTP服務

Node中http模塊繼承自tcp服務器(net模塊),它能與多個客戶端保持連接,由於其不為每個連接創建線程,保持很低的內存占用,所以能實現高並發。HTTP服務和TCP服務區別在於,在開啟keepalive之後,一個TCP會話可以用於多次請求和響應。TCP服務以connection為單位進行服務,HTTP服務以request單位進行服務。http模塊是將connection到request的過程進行封裝。

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

(1) HTTP請求

對於TCP連接的讀操作,http模塊將其封裝為ServerRequest對象。如報頭部分req.method、req.url、req.headers,報文體數據部分抽象為一個只讀的流對象,若業務邏輯需要讀取報文體中的數據,則需要這個數據流結束後才能進行操作。

(2) HTTP響應

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

響應報文頭部信息方法:res.setHeader()和res.writeHeader()方法,可以多次setHeader進行設置,但必須調用writeHeader寫入連接才生效。

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

(3) HTTP服務端事件

connection :客戶端與服務端建立TCP連接時,觸發一次connection事件

request :建立TCP連接後,http模塊底層將數據流中抽象出HTTP請求和HTTP響應,當請求數據發送到服務端,在解析出HTTP請求頭後觸發該事件;在res.end()後,TCP連接可用於下一次請求。

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

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

connect :當客戶端發起CONNECT請求時觸發

upgrade :當客戶端要求升級連接的協議時,需要和服務端協商,客戶端會在請求頭中帶上Updagrade字段

clientError :連接的客戶端發送錯誤,錯誤傳到服務端此時觸發該事件

(4) HTTP客戶端

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

HTTP客戶端和服務端類似,在ClientRequest對象中,它的事件叫做response,ClientRequest在解析響應報文的時,一解析完響應頭就觸發response事件,同時傳遞一個響應對象ClientResponse供操作,後續響應報文以只讀流的方式提供。

(5) HTTP客戶端事件

response :與服務端的request事件對應的客戶端在請求發出後得到響應時觸發該事件。

socket :當底層連接池中建立的連接分配給當前請求對象時觸發;

connect :當客戶端向服務器發送CONNECT請求時,若服務端響應了200狀態碼,客戶端將會觸發該事件。

upgrade :客戶端享服務端發送Upgrade請求時,若服務端響應了101 Switching Protocols狀態,客戶端將會觸發該事件。

continue :客戶端向服務端發起Expect: 100-continue頭信息後,以試圖發送較大數據,若服務端響應100 continue狀態,服務端將觸發該事件

WebSocket服務

WebSocket最早是作為HTML5重要特性出現的,相比HTTP有以下優點:

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

(2) WebSocket服務端可以推送數據到客戶端,這遠比HTTP請求響應模式更靈活、更高效

(3) 更輕量級的協議頭,減少數據傳輸

Node中沒有內置WebSocket的庫,但社區的ws模塊封裝了WebSocket的底層實現如著名的socket.io

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved