瞭解Node.js

Node.js的用途web

一、建立具備實時推送能力的網站數據庫

二、歷來不是用於解決大規模計算問題而建立的。它的出現是爲了解決大規模I/O 的問題服務器

三、Node.js 真正的亮點在於建設高性能,高擴展性的互聯網應用——由於它可以處理龐大的而且高吞吐量的併發鏈接。用於特殊的需求,而不是跟日常的同樣Web開發同樣網絡

Node.js原理多線程

Node.js給了開發者一個使用事件驅動來實現異步開發的優秀解決方案併發

Node.js須要的環境
V8是谷歌開發的,目前公認最快的 Javascript 解析引擎,libuv 是一個開源的、爲 Node 定製而生的跨平臺的異步 IO 庫異步

Node.js推送與傳統比較
一、Node.js 在實時的 Web應用上採用了基於 WebSocket 的推送技術。socket

二、在通過了基於無狀態的請求-返機制的無狀態交互以後,咱們終於有了實時的,雙向鏈接的web應用,客戶端和服務器端均可以發起通訊,可以自由地交換數據。與此造成鮮明對比的是傳統的 web響應模式,客戶端老是主動發起通訊而服務端被動返回。此外,這些都是基於運行在標準80端口上的開放Web組件(HTML、CSS和JS)
三、傳統的網絡服務技術,是每一個新增一個鏈接(請求)便生成一個新的線程,這個新的線程會佔用系統內存,最終會佔掉全部的可用內存。而 Node.js 僅僅只運行在一個單線程中,使用非阻塞的異步 I/O 調用,全部鏈接都由該線程處理,在 libuv 的加分下,能夠容許其支持數萬併發鏈接(所有掛在該線程的事件循環中)。tcp

注意:Websocket  是tcp/ip 協議用於客戶端,對等網等,WebService 是http協議函數

Node.js原則

一、Node.js 都將遵循一個基本原則:響應事件,處理多個併發鏈接,並保持流動性的用戶體驗。
二、在全部客戶端的請求共享單一線程時也會有問題, 這也是一個編寫 Node.js 應用的潛在缺陷. 首先, 大量的計算可能會使得 Node.js 的單線程暫時失去反應, 並致使全部的其餘客戶端的請求一直阻塞, 直到計算結束才恢復正常。Nodejs 是一個線程一個線程來處理全部的連接,因此不管是計算卡了或者是被異常阻塞了均可能會影響到其餘全部的連接

Node.js應用:
一、Node.js在數據真正的寫入以前就認可客戶端的數據是真實的。因爲正對於數據庫的操做其實也是一種堵塞的,因此在還沒真正操做完成前,Node.js就認爲已經處理完成了。(eg.日誌記錄、用戶跟蹤數據,Facebook上的點贊數)
在開發中一般的狀況一般是,種耗時的操做經過回調函數來異步處理,主線程繼續往下執行

二、Node.js以數據流的方式傳遞數據,那麼就能實時進行音頻和視頻編碼

Node.js弱點:
一、Node.js不該該使用在關係型數據庫 ( Sequelize 和 Node ORM2模塊 )。

二、Node.js不該該繁重的服務端計算和處理,耗CPU的計算機。

總結:

Node.js怎樣處理併發的,多個請求的,主要是經過回調函數,可是若是請求的是同一個方法,那麼就只有等待,若是請求的不一樣的方法,就是非阻塞的,就算當前請求正在等待,可是仍能夠執行另外一個請求對應的方法。等空閒的時候,再去執行第一個請求,經過回調函數獲得結果。Java,經過多線程處理,若是又一個請求來了,會在開闢一個線程。

相關文章
相關標籤/搜索