與我們合作
我們專注:網(wǎng)站策劃設(shè)計、網(wǎng)絡(luò)多媒體傳播、網(wǎng)站優(yōu)化及網(wǎng)站營銷、品牌策略與設(shè)計
主營業(yè)務(wù):網(wǎng)站建設(shè)、移動端微信小程序開發(fā)、VI設(shè)計、網(wǎng)絡(luò)運營、云產(chǎn)品·運維解決方案
有一個品牌項目想和我們談?wù)剢?
您可以填寫右邊的表格,讓我們了解您的項目需求,這是一個良好的開始,我們將會盡快與您取得聯(lián)系。當然也歡迎您給我們寫信或是打電話,讓我們聽到您的聲音
您也可通過下列途徑與我們?nèi)〉寐?lián)系:
地 址:蘇州吳中區(qū)東環(huán)路999號正基大廈A座
電 話:0512-65982570
手 機:189-1350-2096
網(wǎng) 址:http://jkszw.com
郵 箱:hsw@szqiqiao.com
快速提交您的需求 ↓
做網(wǎng)站技術(shù)之Node.js 究竟是什么?
發(fā)布日期:2018/7/17 15:14:34
如果您聽說過 Node,或者閱讀過一些文章,宣稱 Node 是多么多么的棒,那么您可能會想:“Node 究竟是什么東西?” 即便是在參閱 Node 的主頁之后,您甚至可能還是 不明白 Node 為何物?Node 肯定不適合每個程序員,但它可能是某些程序員一直苦苦追尋的東西。
為試圖解釋什么是 Node.js,本文將簡要介紹一些背景信息:它要解決的問題,它如何工作,如何運行一個簡單應(yīng)用程序,最后,Node 在什么情況下是一個好的解決方案。本文不涉及如何編寫一個復(fù)雜的 Node 應(yīng)用程序,也不是一份全面的 Node 教程。閱讀本文應(yīng)該有助于您決定是否應(yīng)該繼續(xù)學習 Node,以便將其用于您的業(yè)務(wù)。
Node 公開宣稱的目標是 “旨在提供一種簡單的構(gòu)建可伸縮網(wǎng)絡(luò)程序的方法”。當前的服務(wù)器程序有什么問題?我們來做個數(shù)學題。在 Java? 和 PHP 這類語言中,每個連接都會生成一個新線程,每個新線程可能需要 2 MB 的配套內(nèi)存。在一個擁有 8 GB RAM 的系統(tǒng)上,理論上最大的并發(fā)連接數(shù)量是 4,000 個用戶。隨著您的客戶群的增長,如果希望您的 Web 應(yīng)用程序支持更多用戶,那么,您必須添加更多服務(wù)器。當然,這會增加服務(wù)器成本、流量成本和人工成本等成本。除這些成本上升外,還有一個潛在技術(shù)問題,即用戶可能針對每個請求使用不同的服務(wù)器,因此,任何共享資源都必須在所有服務(wù)器之間共享。鑒于上述所有原因,整個 Web 應(yīng)用程序架構(gòu)(包括流量、處理器速度和內(nèi)存速度)中的瓶頸是:服務(wù)器能夠處理的并發(fā)連接的最大數(shù)量。
Node 解決這個問題的方法是:更改連接到服務(wù)器的方式。每個連接發(fā)射一個在 Node 引擎的進程中運行的事件,而不是為每個連接生成一個新的 OS 線程(并為其分配一些配套內(nèi)存)。Node 聲稱它絕不會死鎖,因為它根本不允許使用鎖,它不會直接阻塞 I/O 調(diào)用。Node 還宣稱,運行它的服務(wù)器能支持數(shù)萬個并發(fā)連接。
現(xiàn)在您有了一個能處理數(shù)萬個并發(fā)連接的程序,那么您能通過 Node 實際構(gòu)建什么呢?如果您有一個 Web 應(yīng)用程序需要處理這么多連接,那將是一件很 “恐怖” 的事!那是一種 “如果您有這個問題,那么它根本不是問題” 的問題。在回答上面的問題之前,我們先看看 Node 的工作原理以及它的設(shè)計運行方式。
網(wǎng)站最主要的功能是發(fā)布消息,但這個消息不是永久保存了,而且保存的時間不會太長,預(yù)計消息的長度也不會太長,因此使用 redis 來存儲是比較合適。
由于對后端數(shù)據(jù)庫這一塊還不太熟悉,目前也就對 PostgreSQL 用得多點,因此在存儲用戶的注冊信息這一塊就選擇了 PostgreSQL。
登錄這一塊打算使用 JWT 來做,因此無需保存用戶狀態(tài)到 PostgreSQL 數(shù)據(jù)庫中,這樣可以減少對數(shù)據(jù)庫的操作。
后端選用 Node.js + koa + koa-router,另外由于現(xiàn)在 async/await 已經(jīng)正式進入 ES2017 了,就打算使用 async/await 優(yōu)化異步代碼的結(jié)構(gòu)。
前端準備做成單頁應(yīng)用,于是選用 preact + redux + redux-thunk。
前端的代碼通過 webpack 打包,而后端的代碼通過 rollup 打包(選用 rollup 打包是由于 Node.js 6+ 已經(jīng)基本支持 ES2015 了,這里只需要將各個模塊打包在一起,順便把 async/await 轉(zhuǎn)換成 Node.js 可以運行的代碼就可以了,而這個工作非常合適 rollup 來做)。

