真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

為什么要用Node.js?哪些場(chǎng)合可以使用Node.js?

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

10多年的梅河口網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整梅河口建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“梅河口網(wǎng)站設(shè)計(jì)”,“梅河口網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

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

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

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

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

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

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

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

它是如何工作的?

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

這讀起來很拗口。

這意味著 Node.js 不是一個(gè)即將成為主宰 Web 開發(fā)界的能夠解決一切的新平臺(tái)。 相反,它是一個(gè)滿足特定需求的平臺(tái)。理解這一點(diǎn)絕對(duì)是有必要的。你絕不希望將 Node.js 用于 CPU 密集型的操作;實(shí)際上,將它用于進(jìn)行大量繁重運(yùn)算的場(chǎng)合將會(huì)消除它幾乎所有的優(yōu)點(diǎn)。 Node.js 真正發(fā)揮作用的地方在于構(gòu)建快速、可擴(kuò)展的網(wǎng)絡(luò)應(yīng)用,因?yàn)樗軌蛞愿咄掏铝刻幚泶罅坎l(fā)連接,這相當(dāng)于具有高可擴(kuò)展性。

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

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

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

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

npm:node 包管理器

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

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

一些很有用的 npm 模塊是:

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

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

哪些場(chǎng)合應(yīng)該使用 Node.js在線聊天

在線聊天是最典型的實(shí)時(shí)多用戶應(yīng)用,也是 Node.js 的案例:它是一個(gè)輕量級(jí)、高流量、數(shù)據(jù)密集型(但是低處理和計(jì)算)的應(yīng)用程序,可分布式跨設(shè)備運(yùn)行。它也是一個(gè)很好的學(xué)習(xí)案例,因?yàn)樗芎?jiǎn)單,但涵蓋了你在典型的 Node.js 程序中所使用的大部分范例。

讓我們?cè)囍枥L它是如何工作的。

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

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

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

當(dāng)其中一個(gè)客戶發(fā)布消息時(shí),會(huì)發(fā)生以下情況:

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

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

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

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

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

隊(duì)列輸入

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

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

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

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

數(shù)據(jù)流

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

代理

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

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

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

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

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

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

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

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

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

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

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

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

哪些場(chǎng)合可以使用 Node.js服務(wù)器端 Web 應(yīng)用

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

優(yōu)點(diǎn):

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

缺點(diǎn):

任何 CPU 密集型計(jì)算都會(huì)阻止 Node.js 響應(yīng),因此線程平臺(tái)是一種更好的方法。將 Node.js 與關(guān)系數(shù)據(jù)庫(kù)放一起使用仍然非常困難(更多細(xì)節(jié)見下文)。如果你要對(duì)關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行操作,請(qǐng)并選擇 Rails、Django 或 ASP.Net MVC 等其他環(huán)境。

CPU 密集型計(jì)算的一種替代方法是創(chuàng)建一個(gè)可高度擴(kuò)展的 MQ 支持環(huán)境,該環(huán)境具有后端處理功能,以使 Node 成為一個(gè)前臺(tái)“職員”,并以異步方式處理客戶端請(qǐng)求。

什么時(shí)候不應(yīng)使用 Node.js帶有關(guān)系型數(shù)據(jù)庫(kù)的服務(wù)器端 Web 應(yīng)用

例如,將 Node.js + Express.js 與 Ruby on Rails 進(jìn)行比較,當(dāng)涉及到關(guān)系數(shù)據(jù)訪問時(shí),顯然后者更合適。

與其競(jìng)爭(zhēng)對(duì)手相比,Node.js 的關(guān)系型數(shù)據(jù)庫(kù)工具仍然相當(dāng)原始。另一方面,Rails 提供了開箱即用的數(shù)據(jù)訪問設(shè)置以及數(shù)據(jù)庫(kù)架構(gòu)遷移支持工具,另外還有其他的 Gems。 Rails 及類似框架擁有成熟的且經(jīng)過驗(yàn)證的 Active RecordData Mapper數(shù)據(jù)訪問層實(shí)現(xiàn),如果你想要嘗試在純 JavaScript 中復(fù)制這些功能的話,那么祝你好運(yùn)。

不過,如果你真的傾向于用 JS 實(shí)現(xiàn)一切,請(qǐng)查看 Sequelize 和 Node ORM2。

如果僅僅是把 Node.js 用作面向公眾的界面,同時(shí)用 Rails 后端訪問關(guān)系數(shù)據(jù)庫(kù),這是可以的,而且這種方式并不罕見。

繁重的服務(wù)器端計(jì)算與處理

當(dāng)涉及到繁重的計(jì)算時(shí),Node.js 并不是最好的平臺(tái)。你絕對(duì)不想用 Node.js 去構(gòu)建一個(gè) Fibonacci 計(jì)算服務(wù)器。通常,任何 CPU 密集型操作都會(huì)通過事件驅(qū)動(dòng)的非阻塞 I/O 模型來抵消 Node 提供的所有吞吐量?jī)?yōu)勢(shì),因?yàn)楫?dāng)線程被數(shù)字運(yùn)算占用時(shí),任何傳入請(qǐng)求都將被阻止。

正如前面所說的,Node.js 是單線程的,只使用一個(gè)CPU核心。在多核服務(wù)器上添加并發(fā)性時(shí),Node 核心團(tuán)隊(duì)以 cluster module 的形式完成一些工作。你也可以很容易地在反向代理 nginx 的后面運(yùn)行幾個(gè) Node.js 服務(wù)器實(shí)例。

如果使用群集,你仍然應(yīng)該將所有繁重的計(jì)算放到在更合適的環(huán)境下編寫的后臺(tái)進(jìn)程中,并使它們通過像 RabbitMQ 這樣的消息隊(duì)列服務(wù)器進(jìn)行通信。

即使你所有的后臺(tái)處理最初可能在同一服務(wù)器上運(yùn)行,這種方法也有可能實(shí)現(xiàn)非常高的可伸縮性。這些后臺(tái)處理服務(wù)可以輕松地被分發(fā)到單獨(dú)的工作服務(wù)器,而無需對(duì)前置 Web 服務(wù)器負(fù)載進(jìn)行配置。

當(dāng)然,你也可以在其他平臺(tái)上使用相同的方法,但是使用 Node.js,你可以獲得我們所討論的高 reqs/sec 吞吐量,因?yàn)槊總€(gè)請(qǐng)求都是一個(gè)非??焖儆行У男∪蝿?wù)。

結(jié)論

我們討論了 Node.js 從理論到實(shí)踐,從它的目標(biāo)和抱負(fù)開始,并以其點(diǎn)和陷阱結(jié)束。當(dāng)人們遇到 Node 的問題時(shí),它幾乎總是唄歸結(jié)為阻塞操作是所有邪惡的根源 —— 其中 99% 的直接原因是對(duì) Node 的誤用。

請(qǐng)記?。翰灰?Node.js 來解決計(jì)算擴(kuò)展問題。它是為了解決 I/O 擴(kuò)展問題而設(shè)計(jì)的,它做得確實(shí)很好

所以,如果你的應(yīng)用不包含 CPU 密集型操作,也不訪問任何阻塞資源的話,可以利用 Node.js 的優(yōu)勢(shì),享受快速、可擴(kuò)展的網(wǎng)絡(luò)應(yīng)用。

英文地址原文:https://medium.com/the-node-js-collection/why-the-hell-would-you-use-node-js-4b053b94ab8e

【視頻教程推薦:nodejs視頻教程 】
網(wǎng)頁(yè)標(biāo)題:為什么要用Node.js?哪些場(chǎng)合可以使用Node.js?
文章分享:http://weahome.cn/article/cpgcsi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部