搜尋
首頁web前端js教程NodeJS學習筆記之網路程式設計_node.js

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

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
使用Next.js(後端集成)構建多租戶SaaS應用程序使用Next.js(後端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:23 AM

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

如何使用Next.js(前端集成)構建多租戶SaaS應用程序如何使用Next.js(前端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:22 AM

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript:探索網絡語言的多功能性JavaScript:探索網絡語言的多功能性Apr 11, 2025 am 12:01 AM

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的演變:當前的趨勢和未來前景JavaScript的演變:當前的趨勢和未來前景Apr 10, 2025 am 09:33 AM

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

神秘的JavaScript:它的作用以及為什麼重要神秘的JavaScript:它的作用以及為什麼重要Apr 09, 2025 am 12:07 AM

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python還是JavaScript更好?Python還是JavaScript更好?Apr 06, 2025 am 12:14 AM

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

如何安裝JavaScript?如何安裝JavaScript?Apr 05, 2025 am 12:16 AM

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。

在Quartz中如何在任務開始前發送通知?在Quartz中如何在任務開始前發送通知?Apr 04, 2025 pm 09:24 PM

如何在Quartz中提前發送任務通知在使用Quartz定時器進行任務調度時,任務的執行時間是由cron表達式設定的。現�...

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能