NodeJs 進階學習
Node特性(解決web服務器高性能瓶頸問題)
- 1.單線程
相對其他服務器開發語言來說,像java、php,用戶每一次請求都會為用戶創建單獨的線程,會增大服務器的開銷,可能會造成內存嚴重不足,需要使用多臺
服務器。 而node則是單線程,不會獨立創建單獨的線程,從而減少服務器硬件上的開銷。node通過內部事件,當用戶連接時就會觸發,通過非阻塞I/O、事件驅動機制,讓node宏觀上來看也是"并發執行"的,一個8G的內存服務器可處理同時4萬的連接,同時它也能解決服務器線程開銷的時間。
缺點: 因為是單線程,當某個用戶線程崩潰,那么導致了其他用戶也會崩潰
解決: pm2(出現崩潰服務會照常運行不會造成整個服務停止) pm2 start app.js pm2 list pm2 log app
2.非阻塞I/O
傳統服務器開發,進行I/O操作,比如數據庫讀寫,往往會等到查詢的結果,代碼才會繼續往下執行,這就造成了堵塞,而node則是放到回調函數中,等待返回結果
在執行回調函數,不會造成堵塞,它會對CPU的利用率更高。--------有了非阻塞并不能解決問題,還需借助事件循環機制
- 事件驅動
在比如客戶端建立連接、發送請求、提交數據時,都會觸發相對應的事件,而在某一個時刻,只能處理一個事件的回調函數,而在處理某一個事件的回調函數時,又可以轉化為其他事件,然后返回執行原有事件的回調函數,從而產生了事件循環。Node底層是用c++寫的,V8也是基于c++,c++,在底層代碼中,多數都是用事件隊列、回調函數隊列的構建。用事件隊列來完成服務器的任務調度。隊列也有優先級。
Node適合干什么
因為基于node的特性,善于I/O,不善于計算,如果業務中有大批量的計算服務,實際上也相當于阻塞了這個線程,node不適合做這樣的開發。
當應用程序處理大批量并發的I/O時,而在響應之前不需要大批量的計算,內部處理時,nodejs非常適合。nodejs也非常適合長連接的項目開發,非常適合
與websocket結合,開發實時交互的應用程序。比如:用戶表單收集、考試系統、聊天室、圖文直播、提供JSON API服務
- Node 可以挑戰PHP、Java、?等傳統服務器開發語言嗎
答案是無法比擬的,因為很多企業追求的是可靠的服務,node是一種工具,它在處理某一塊時是非常有用的。然而很多企業也都在用node處理某一塊業務功能
Node安裝
推薦使用nvm(包括線上的生產環境搭建)
nvm install v8.10.0 安裝 node
nvm use v8.10.0 nvm 指定使用的 node 的版本
nvm alias default v8.10.0 設置 node 默認使用版本
npm config set registry https://registry.npm.taobao.org 設置淘寶鏡像
增加系統文件監控數目 echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
Node模塊進階API學習
get相對來說簡單些,通過url來獲取
//未完待續 ^