gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

為什么要用Node.js?哪些場合可以使用 Node.js?

為什么要用Node.js?哪些場合可以使用 Node.js?

JavaScript 的日益發(fā)展帶來了很多變化,當今的 Web 開發(fā)面貌已經(jīng)變得截然不同。在幾年前是很難想象在服務器上運行 JavaScript 的。

在深入研究Node.js之前,你可能想了解使用跨棧的 JavaScript 有什么好處,它統(tǒng)一了語言和數(shù)據(jù)格式(JSON),允許你以最佳的方式重用開發(fā)人員資源。將 Node.js 合并到技術棧中是一個關鍵優(yōu)勢?!疽曨l教程推薦:nodejs視頻教程 】

Node.js 是一個基于 Chrome 的名為 V8 的 JavaScript 引擎構建的 JavaScript 運行環(huán)境。值得注意的是,Node.js 的創(chuàng)建者 Ryan Dahl 的“受到 Gmail 等應用的啟發(fā)”,目標是為了開發(fā)一個具有實時推送功能的網(wǎng)站。在 Node.js 中,他提供了一個用于處理非阻塞事件驅動的 I/O 工具。

用一句話來概括:Node.js 在基于websockets 推送技術的實時 Web 應用中大放異彩。在過去的 20 多年來我們一直在使用基于無狀態(tài)請求 – 響應模式的無狀態(tài) Web 應用,現(xiàn)在終于擁有了能夠實時雙向連接的 Web 應用,其中客戶端和服務器都可以啟動通信,并允許它們自由地交換數(shù)據(jù)。

這與典型的總是由客戶端發(fā)起通信的 Web 響應模式形了成鮮明的對比。此外它也同樣基于在標準端口 80 上運行的開放 Web 技術棧(HTML,CSS和JS)。

有人可能會爭辯說,我們多年來一直以 Flash 和 Java Applet 的形式做到這一點 —— 但實際上,這些只是使用 Web 作為傳輸協(xié)議將數(shù)據(jù)傳給客戶端的沙盒環(huán)境。此外,它們是隔離運行的,通常在非標準端口上運行,這可能需要額外的權限。

憑借其優(yōu)勢,Node.js 在依賴其獨特優(yōu)勢的眾多知名公司的技術堆棧中發(fā)揮著關鍵作用。 Node.js 基金會幾乎已經(jīng)整合了所有最好的想法,可以在 Node.js 基金會的案例研究頁面上找到關于為什么企業(yè)應該考慮 Node.js 的簡短PPT。

在本文中,我將不僅要討論如何使用這些優(yōu)勢,而且還要討論 為什么 你可能想要使用 Node.js ,并用一些經(jīng)典的 Web 應用程序模型作為示例。

它是如何工作的?

Node.js 的主要思想是:在面向跨分布式設備運行的數(shù)據(jù)密集型的實時程序時,使用非阻塞、事件驅動的 I/O 來保證輕量和高效。

這讀起來很拗口。

這意味著 Node.js 不是 一個即將成為主宰 Web 開發(fā)界的能夠解決一切的新平臺。 相反,它是一個滿足特定需求的平臺。理解這一點絕對是有必要的。你絕不希望將 Node.js 用于 CPU 密集型的操作;實際上,將它用于進行大量繁重運算的場合將會消除它幾乎所有的優(yōu)點。 Node.js 真正發(fā)揮作用的地方在于構建快速、可擴展的網(wǎng)絡應用,因為它能夠以高吞吐量處理大量并發(fā)連接,這相當于具有高可擴展性。

其底層的工作原理非常有趣。傳統(tǒng)的 Web 服務技術每個連接(請求)都會產(chǎn)生一個新線程,占用系統(tǒng)內(nèi)存并最終受限于可用的最大內(nèi)存,而 Node.js 在單線程上運行,使用非阻塞 I/O 調(diào)用,允許它支持數(shù)以萬計的并發(fā)連接(在 event loop 中維持)。

為什么要用Node.js?哪些場合可以使用 Node.js?

快速計算:假設每個線程需要 2 MB 內(nèi)存,那么在有 8 GB 內(nèi)存的系統(tǒng)上運行的話,理論上最多有 4000 個并發(fā)連接(計算來自 Michael Abernethy 的文章 “Just what is Node.js?“,2011年在 IBM developerWorks 上發(fā)布;不幸的是,這篇文章的鏈接現(xiàn)在已經(jīng)失效了),這還沒有算上線程之間的上下文切換的成本。這就是你通常在傳統(tǒng)的 Web 服務器技術中處理的場景。通過避免所有這些問題,Node.js 實現(xiàn)了超過 1M 連接并發(fā)數(shù)的級別,以及 600k 的 websockets 并發(fā)連接數(shù)。

當然,編寫 Node.js 應用的潛在缺陷是存在客戶端請求之間共享單個線程的問題。首先,繁重的計算可能會阻塞 Node 的單個線程并導致 所有 客戶端出現(xiàn)問題(稍后會詳細說明),因為傳入的請求將被阻塞,直到計算完成為止。其次開發(fā)人員需要 非常小心,不要讓異常冒泡到到核心(最頂層)Node.js 事件循環(huán),這將導致 Node.js 實例終止(程序崩潰)。

為了避免異常冒泡到頂層,常用技術是將錯誤作為回調(diào)參數(shù)傳遞回調(diào)用者(而不是像在其他環(huán)境中那樣拋出它們)。即使一些未被處理的異常冒泡到頂層,也有一些工具來監(jiān)視 Node.js 進程并執(zhí)行必要的恢復崩潰 (雖然可能無法恢復到用戶會話的當前狀態(tài)),最常見的是 Forever 模塊。

npm:node 包管理器

在討論 Node.js 時,一件絕對不應該被忽略的事是支持使用內(nèi)置的 npm 工具進行包管理,默認情況下每個 Node.js 環(huán)境都會安裝。 npm 模塊的概念非常類似于 Ruby Gems:一組可通過在線存儲庫輕松安裝,具有版本和依賴關系管理的可重用組件,。

可以在 npm 網(wǎng)站上找到已打包模塊的完整列表,也可以使用自動與 Node.js 一起安裝的 npm CLI 工具進行訪問。模塊生態(tài)系統(tǒng)對所有人開放,任何人都可以發(fā)布自己的模塊,發(fā)布的模塊將出現(xiàn)在 npm 存儲庫中。有關 npm 的簡介,請參閱初學者指南,以及 npm 發(fā)布教程中關于發(fā)布模塊的部分。

一些很有用的 npm 模塊是:

  • express —— Express.js,一個受 Sinatra 啟發(fā)的 Node.js Web 開發(fā)框架,當今大多數(shù) Node.js 應用程序的事實標準。
  • hapi —— 一個模塊化的且非常易于使用的以配置為中心的框架,用于構建 Web 和服務應用
  • connect —— Connect 是 Node.js 的可擴展 HTTP 服務器框架,提供了一系列稱為中間件的高性能“插件”作為Express的基礎。
  • socket.iosockjs —— 今天最常見的兩個 websockets 服務器端組件。
  • pug(以前叫 Jade)—— 受 HAML 啟發(fā)的流行模板引擎之一,Express.js 中的默認選項。
  • mongodbmongojs —— MongoDB 包裝器,為 Node.js 中的 MongoDB 對象數(shù)據(jù)庫提供 API。
  • redis —— Redis 客戶端。
  • forever?—— 可能是確保給定 node 腳本連續(xù)運行的最常用實用程序。在遇到意外故障時,將 Node.js 的進程保持在生產(chǎn)狀態(tài)。
  • bluebird —— 功能齊全的 Promises/A+ 實現(xiàn),性能非常出色
  • moment —— 用于解析、驗證、操作和格式化日期的輕量級 JavaScript 日期庫。

列表還在不斷增長。那里有很多有用的包,可供所有人使用。

哪些場合應該使用 Node.js

在線聊天

在線聊天是最典型的實時多用戶應用,也是 Node.js 的最佳案例:它是一個輕量級、高流量、數(shù)據(jù)密集型(但是低處理和計算)的應用程序,可分布式跨設備運行。它也是一個很好的學習案例,因為它很簡單,但涵蓋了你在典型的 Node.js 程序中所使用的大部分范例。

讓我們試著描繪它是如何工作的。

假設一個最簡單的場景,在我們的網(wǎng)站上有一個聊天室,人們可以通過一對多(實際上是對所有人)的方式交換消息。

在服務器端,我們有一個簡單的 Express.js 程序,它實現(xiàn)了兩件事:1) 一個GET 請求的處理程序,它提供了包含留言板和用于初始化新消息輸入的“發(fā)送”按鈕的功能,以及2) 用于偵聽 websocket 客戶端發(fā)出的新消息的w ebsockets 服務器。

在客戶端,我們有一個 HTML 頁面,其中設置了幾個處理程序,一個用于“發(fā)送”按鈕的單擊事件,它接收輸入消息并將其發(fā)送到 websocket,另一個用于偵聽新的傳入消息并顯示在 websockets 客戶端上(即服務器希望客戶端顯示的其他用戶發(fā)送的消息)。

當其中一個客戶發(fā)布消息時,會發(fā)生以下情況:

  • 瀏覽器捕獲單擊“發(fā)送”按鈕事件處理 JavaScript 程序,從輸入字段(即消息文本)中獲取值,并使用連接到我們服務器的 websocket 客戶端發(fā)出 websocket 消息(在網(wǎng)頁初始化時初始化) 。
  • websocket 連接的服務器端組件接收消息,并使用廣播方式將其轉發(fā)給所有其他的客戶端。
  • 所有客戶端都通過在網(wǎng)頁中運行的 websockets 客戶端組件接收新消息。然后,他們通過將新消息添加頁面上并更新。

為什么要用Node.js?哪些場合可以使用 Node.js?

這是最簡單的例子。對于更強大的解決方案,你可以使用基于 Redis 的簡單緩存?;蛘咴诟呒壍慕鉀Q方案中,可以用消息隊列作為消息路由,還可以實現(xiàn)更強大的傳遞機制,例如可以在連接丟失或在客戶端脫機時存儲消息。但無論你做出哪些改進,Node.js 仍將按照相同的基本原則運行:對事件做出反應,處理許多并發(fā)連接,并保持用戶體驗的流暢性。

對象數(shù)據(jù)庫頂層的 API

雖然 Node.js 的確很適合開發(fā)實時應用,但它也很適合從對象數(shù)據(jù)庫(例如MongoDB)公開數(shù)據(jù)。 JSON 存儲的數(shù)據(jù)允許 Node.js 在對象與存儲數(shù)據(jù)一致和沒有數(shù)據(jù)轉換的情況下良好的運行。

例如,如果你正在使用 Rails,那么你需要從 JSON 轉換為二進制模型,然后通過 HTTP 再將它們轉為 JSON 在 React.js 或 Angular.js 中使用 ,甚至可以用簡單的 jQuery AJAX 進行調(diào)用。使用 Node.js,你可以通過 REST API 直接公開你的 JSON 對象來供客戶端使用。此外,在從數(shù)據(jù)庫讀取或寫入時(如果你使用的是MongoDB),你無需擔心在 JSON 和其他任何內(nèi)容之間進行轉換的問題。總之在客戶端、服務器和數(shù)據(jù)庫中使用統(tǒng)一的數(shù)據(jù)序列化格式,可以避免多次轉換的麻煩。

隊列輸入

如果你收到了大量并發(fā)數(shù)據(jù),那么你的數(shù)據(jù)庫可能會成為瓶頸。如上所述,Node.js 可以輕松地自己處理并發(fā)連接。但是因為數(shù)據(jù)庫訪問是一種阻塞操作(在這種情況下),所以我們遇到了麻煩。解決方案是在數(shù)據(jù)真正寫入數(shù)據(jù)庫之前先確認客戶端的行為。

通過這種方法,系統(tǒng)可以在高負載下保持其響應性,這在客戶端不需要確認數(shù)據(jù)成功寫入時尤其有用。典型的例子包括:記錄或寫入用戶跟蹤數(shù)據(jù)時進行分批處理;以及最終一致性(經(jīng)常在NoSQL世界中使用)可以接受的不需要立即作出反映的操作(例如更新 Facebook 上的“Likes”計數(shù))。

數(shù)據(jù)通過某種緩存或消息隊列(例如,RabbitMQ,ZeroMQ)排隊,并通過單獨的數(shù)據(jù)庫批量寫入過程,或者由計算密集型后端服務進行消化,再寫入更好的能夠執(zhí)行此類任務的平臺。類似的行為可以用其他語言或框架實現(xiàn),但不能在相同的硬件上實現(xiàn),以維持相同的高吞吐量。

為什么要用Node.js?哪些場合可以使用 Node.js?

簡而言之:使用 Node,你可以將數(shù)據(jù)庫寫先入到一個地方,稍后再去處理它們,就像它們已經(jīng)被成功處理一樣。

數(shù)據(jù)流

在更傳統(tǒng)的Web平臺中,HTTP 請求和響應被看作是孤立事件,實際上他們是流。可以在 Node.js 中使用這個性質來構建一些很酷的功能。例如文件可以被一邊上傳一邊處理,因為數(shù)據(jù)通過流進入,我們可以實時的去處理它。這可以用于實時音頻視頻編碼,以及在不同數(shù)據(jù)源的之間進行代理(參見下一部分)。

代理

把 Node.js 用作服務器端代理是很容易的,它能夠以非阻塞方式處理大量的并發(fā)連接。這對于為代理不同響應時間的多個服務,或從多個源收集數(shù)據(jù)的場景特別有用。

例如以下場景:當服務器端程序與第三方資源進行通信時,會從不同的來源提取數(shù)據(jù),或者將圖像和視頻等資源存儲到第三方云服務上。

盡管有專用代理服務器,但是如果你沒有基礎的代理架構,或者你需要本地開發(fā)環(huán)境,那么 Node 可能會對你有所幫助。

股票交易商的數(shù)據(jù)界面

讓我們回到應用程序??梢院苋菀椎赜脤崟r網(wǎng)絡解決方案取代的另一個例子是股票經(jīng)紀人的交易軟件,它用于跟蹤股票價格、執(zhí)行計算、技術分析以及創(chuàng)建圖表。

如果切換到基于 Web 的實時解決方案,經(jīng)紀人將可以輕松切換工作站或工作場所。很快,我們可能會開始在佛羅里達州的海灘上看到它們……

應用監(jiān)控儀表板

另一個常見的用例,其中 Node-with-web-socket 完全適合:跟蹤網(wǎng)站訪問者并對他們的交互進行實時的可視化。你可以從用戶那里實時收集統(tǒng)計信息,甚至可以通過在訪問渠道中特定的點來打開通信渠道,并與訪問者進行有針對性的互動,這種方案可以在這里找到: CANDDi。

想象一下,如果你能夠實時了解訪問者所做的事情,你將如何改善你的業(yè)務呢?通過使用 Node.js 的實時雙向套接字,現(xiàn)在就可以做到了。

系統(tǒng)監(jiān)控儀表板

在基礎設施方面,。比如想要為其用戶提供服務監(jiān)控頁面的SaaS提供商(例如,GitHub狀態(tài)頁面)。通過 Node.js 事件循環(huán),我們可以創(chuàng)建一個功能強大的基于 Web 的儀表板,以異步方式檢查服務的狀態(tài),并使用 websockets 將數(shù)據(jù)推送到客戶端。公司內(nèi)部和公共服務的狀態(tài)都可以使用該技術得到實時報告。

注意:不要嘗試在 Node.js 中構建硬實時系統(tǒng)(即需要一致響應時間的系統(tǒng))。對于那類應用程序,Erlang 可能是更好的選擇。

哪些場合可以使用 Node.js

服務器端 Web 應用

配合 Express.js 的 Node.js 也可在服務器端創(chuàng)建經(jīng)典 Web 應用。對于這種方法,有人支持也有人反對。以下是一些需要考慮的問題:

優(yōu)點:

  • 如果你的程序沒有任何 CPU 密集型計算,可以用 Javascript 和對象存儲數(shù)據(jù)庫(如MongoDB)構建它,甚至可以在數(shù)據(jù)庫級別進行構建。這顯著的簡化了開發(fā)工作。
  • 爬蟲會收到一個能夠完全呈現(xiàn)的 HTML 響應,這比單頁應用或在 Node.js 上運行的 websockets 應用程序更能進行 SEO 。

缺點:

  • 任何 CPU 密集型計算都會阻止 Node.js 響應,因此線程平臺是一種更好的方法。
  • 將 Node.js 與關系數(shù)據(jù)庫放一起使用仍然非常困難(
贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
一本色道久久88亚洲精品综合| 成人网站免费观看入口| 日本大片免费看| 亚洲午夜激情影院| 日韩免费高清在线| 青青草视频在线免费播放| 黄瓜视频免费观看在线观看www| 国内外成人免费激情视频| 免费看日b视频| 裸体大乳女做爰69| 小泽玛利亚视频在线观看| 精品一区二区中文字幕| 人人干视频在线| 欧美高清中文字幕| 裸体大乳女做爰69| 妞干网这里只有精品| 国产精品嫩草影视| 一级黄色录像免费看| 欧美在线a视频| 亚洲欧洲日本精品| 欧美在线aaa| 狠狠干狠狠操视频| 天堂网成人在线| 50度灰在线观看| 男人添女人荫蒂免费视频| 91动漫在线看| 欧美视频在线观看网站| 美脚丝袜脚交一区二区| 免费在线激情视频| 亚洲老女人av| 亚洲小说欧美另类激情| 日韩小视频网站| 国产精品99久久免费黑人人妻| 一级黄色香蕉视频| 国产成年人在线观看| av动漫免费观看| 国产一级大片免费看| 日韩欧美国产免费| 国产aⅴ爽av久久久久| 免费久久久久久| 日韩免费一级视频| 免费黄频在线观看| 免费看日本毛片| 黄色手机在线视频| 国产精品久久久久久久乖乖| 无码日韩人妻精品久久蜜桃| 五月天六月丁香| 国产性xxxx18免费观看视频| 色18美女社区| 久久久亚洲精品无码| 午夜视频在线网站| 亚洲 高清 成人 动漫| 免费成人黄色大片| 日韩视频第二页| 黄色一级片av| 亚洲精品手机在线观看| 97碰在线视频| 97超碰人人爽| 成人毛片视频网站| 可以免费看的黄色网址| 欧美日韩第二页| 日韩 欧美 视频| 国产又大又长又粗又黄| 精品久久久久久久免费人妻| 日韩激情视频一区二区| 中文av一区二区三区| 黄色影院一级片| 国产免费一区二区视频| 超碰成人在线免费观看| 一区二区三区国产免费| 18禁免费观看网站| 妞干网视频在线观看| 午夜影院免费版| 亚洲精品综合在线观看| 少妇黄色一级片| 亚洲乱码国产一区三区| av天堂永久资源网| 狠狠97人人婷婷五月| 成年人网站国产| 亚洲色成人www永久在线观看| 在线观看免费黄色片| 黄频视频在线观看| 亚洲第一成肉网| 夜夜爽久久精品91| 黄色一级视频播放| 久久久久久久香蕉| 国产爆乳无码一区二区麻豆| 路边理发店露脸熟妇泻火| ijzzijzzij亚洲大全| 免费观看国产视频在线| 四虎精品欧美一区二区免费| 亚洲美女自拍偷拍| www.69av| 成年人深夜视频| 日韩小视频网站| 免费成人在线视频网站| 免费毛片网站在线观看| 精品这里只有精品| 日韩av在线综合| 欧美美女一级片| 91嫩草国产丨精品入口麻豆| 日韩欧美猛交xxxxx无码| 777精品久无码人妻蜜桃| 阿v天堂2017| 欧美日韩亚洲自拍| 国产一级片中文字幕| 国产一级片中文字幕| 成人在线视频一区二区三区| 99在线精品免费视频| 国产在线青青草| 国产九九在线视频| 秋霞在线一区二区| 99视频在线免费播放| 浓精h攵女乱爱av| 法国空姐在线观看免费| 欧美精品99久久| 久久人人爽av| 免费毛片网站在线观看| 激情视频免费网站| 国产成人亚洲综合无码| 久久久久久久久久久久久国产精品| 亚欧美在线观看| 亚洲理论电影在线观看| 天天操天天爱天天爽| 肉大捧一出免费观看网站在线播放| 亚洲 欧美 日韩 国产综合 在线| 三级a三级三级三级a十八发禁止| 精产国品一二三区| 丰满少妇在线观看| 国产精品网站免费| 在线观看免费黄色片| 精品久久久久久久无码| 国产黄色激情视频| 在线视频观看一区二区| 免费日韩中文字幕| 久久久性生活视频| 免费观看中文字幕| 黄色小视频免费网站| 男女av免费观看| 精品国产一区二区三区无码| 久久婷婷中文字幕| 五月婷婷之综合激情| 欧美综合在线播放| 日本人妻伦在线中文字幕| 尤物网站在线看| 九九精品久久久| 91看片就是不一样| 欧美女人性生活视频| 人妻av中文系列| 欧美国产日韩激情| 日韩xxxx视频| 日韩欧美猛交xxxxx无码| 国产精品12p| 91丝袜超薄交口足| 女人高潮一级片| 天天干天天操天天玩| 另类小说第一页| 亚洲欧美日韩一级| 亚洲精品午夜在线观看| 国产区二区三区| 色www免费视频| 特级西西444www| 欧美xxxxxbbbbb| 男人的天堂视频在线| 日韩中文字幕在线不卡| 激情六月天婷婷| 国产美女网站在线观看| 亚洲熟妇av一区二区三区漫画| 欧美成人三级在线视频| 欧美二区在线视频| 亚洲狼人综合干| 国产探花在线看| 伊人网在线免费| ww国产内射精品后入国产| 国产成人a亚洲精v品无码| 成人黄色一区二区| 日韩在线一区视频| 亚洲区成人777777精品| 国产专区在线视频| 国产亚洲综合视频| jizz大全欧美jizzcom| 可以免费看的黄色网址| 性欧美大战久久久久久久| 日韩毛片在线免费看| 性生活免费在线观看| 欧美日韩理论片| 免费观看国产精品视频| 黄色免费网址大全| 男女激烈动态图| 久久久久久久久久久久久国产精品| 欧美男女交配视频| 黄色一级大片免费| 日本三区在线观看| 色一情一乱一乱一区91| 日本a级片免费观看| 国产精品h视频| 欧美 国产 小说 另类| 日本中文字幕在线不卡| 黑鬼大战白妞高潮喷白浆| 中文字幕色呦呦|