SEARCH
網站建設|網站制作|網站設計—蘇州先飛網絡科技有限公司

Internet Develppment互聯網開(kāi)發(fā)&推廣服務提供商

Search

與我們合作

我們專注:網站策劃設計、網絡多媒體傳播、網站優化及網站營銷、品牌策略與設計
主營業務:網站建設、移動端微信小程序開(kāi)發(fā)、VI設計、網絡運營、雲産品·運維解決方案

有一個品牌項目想和我們談談嗎?

您可以填寫右邊的表格,讓我們了解您的項目需求,這(zhè)是一個良好(hǎo)的開(kāi)始,我們將(jiāng)會盡快與您取得聯系。當然也歡迎您給我們寫信或是打電話,讓我們聽到您的聲音

您也可通過(guò)下列途徑與我們取得聯系:

地 址:蘇州吳中區東環路999号正基大廈A座

電 話:0512-65982570

手 機:189-1350-2096

網 址:http://www.szqiqiao.com

郵 箱:hsw@szqiqiao.com

快速提交您的需求 ↓

點擊更新驗證碼

做網站技術之Node.js 究竟是什麼(me)?

發(fā)布日期:2018/7/17 15:14:34

    如果您聽說過(guò) Node,或者閱讀過(guò)一些文章,宣稱 Node 是多麼(me)多麼(me)的棒,那麼(me)您可能(néng)會想:“Node 究竟是什麼(me)東西?” 即便是在參閱 Node 的主頁之後(hòu),您甚至可能(néng)還(hái)是 不明白 Node 爲何物?Node 肯定不适合每個程序員,但它可能(néng)是某些程序員一直苦苦追尋的東西。


    爲試圖解釋什麼(me)是 Node.js,本文將(jiāng)簡要介紹一些背景信息:它要解決的問題,它如何工作,如何運行一個簡單應用程序,最後(hòu),Node 在什麼(me)情況下是一個好(hǎo)的解決方案。本文不涉及如何編寫一個複雜的 Node 應用程序,也不是一份全面(miàn)的 Node 教程。閱讀本文應該有助于您決定是否應該繼續學(xué)習 Node,以便將(jiāng)其用于您的業務。


    Node 公開(kāi)宣稱的目标是 “旨在提供一種(zhǒng)簡單的構建可伸縮網絡程序的方法”。當前的服務器程序有什麼(me)問題?我們來做個數學(xué)題。在 Java™ 和 PHP 這(zhè)類語言中,每個連接都(dōu)會生成(chéng)一個新線程,每個新線程可能(néng)需要 2 MB 的配套内存。在一個擁有 8 GB RAM 的系統上,理論上最大的并發(fā)連接數量是 4,000 個用戶。随著(zhe)您的客戶群的增長(cháng),如果希望您的 Web 應用程序支持更多用戶,那麼(me),您必須添加更多服務器。當然,這(zhè)會增加服務器成(chéng)本、流量成(chéng)本和人工成(chéng)本等成(chéng)本。除這(zhè)些成(chéng)本上升外,還(hái)有一個潛在技術問題,即用戶可能(néng)針對(duì)每個請求使用不同的服務器,因此,任何共享資源都(dōu)必須在所有服務器之間共享。鑒于上述所有原因,整個 Web 應用程序架構(包括流量、處理器速度和内存速度)中的瓶頸是:服務器能(néng)夠處理的并發(fā)連接的最大數量。


    Node 解決這(zhè)個問題的方法是:更改連接到服務器的方式。每個連接發(fā)射一個在 Node 引擎的進(jìn)程中運行的事(shì)件,而不是爲每個連接生成(chéng)一個新的 OS 線程(并爲其分配一些配套内存)。Node 聲稱它絕不會死鎖,因爲它根本不允許使用鎖,它不會直接阻塞 I/O 調用。Node 還(hái)宣稱,運行它的服務器能(néng)支持數萬個并發(fā)連接。


    現在您有了一個能(néng)處理數萬個并發(fā)連接的程序,那麼(me)您能(néng)通過(guò) Node 實際構建什麼(me)呢?如果您有一個 Web 應用程序需要處理這(zhè)麼(me)多連接,那將(jiāng)是一件很 “恐怖” 的事(shì)!那是一種(zhǒng) “如果您有這(zhè)個問題,那麼(me)它根本不是問題” 的問題。在回答上面(miàn)的問題之前,我們先看看 Node 的工作原理以及它的設計運行方式。


網站最主要的功能(néng)是發(fā)布消息,但這(zhè)個消息不是永久保存了,而且保存的時間不會太長(cháng),預計消息的長(cháng)度也不會太長(cháng),因此使用 redis 來存儲是比較合适。


由于對(duì)後(hòu)端數據庫這(zhè)一塊還(hái)不太熟悉,目前也就對(duì) PostgreSQL 用得多點,因此在存儲用戶的注冊信息這(zhè)一塊就選擇了 PostgreSQL。


登錄這(zhè)一塊打算使用 JWT 來做,因此無需保存用戶狀态到 PostgreSQL 數據庫中,這(zhè)樣(yàng)可以減少對(duì)數據庫的操作。


後(hòu)端選用 Node.js + koa + koa-router,另外由于現在 async/await 已經(jīng)正式進(jìn)入 ES2017 了,就打算使用 async/await 優化異步代碼的結構。


前端準備做成(chéng)單頁應用,于是選用 preact + redux + redux-thunk。


前端的代碼通過(guò) webpack 打包,而後(hòu)端的代碼通過(guò) rollup 打包(選用 rollup 打包是由于 Node.js 6+ 已經(jīng)基本支持 ES2015 了,這(zhè)裡(lǐ)隻需要將(jiāng)各個模塊打包在一起(qǐ),順便把 async/await 轉換成(chéng) Node.js 可以運行的代碼就可以了,而這(zhè)個工作非常合适 rollup 來做)。


GO 欣賞案例
查看經(jīng)典案例

TOP

QQ客服

QQ客服 免費電話
獲取報價
您的稱呼:

*

您的電話:

*

您的郵箱:

*

提交 重置