導航:首頁 > 程序命令 > nodejs程序員

nodejs程序員

發布時間:2022-05-16 16:21:25

❶ nodejs 初級,中級,高級程序員怎麼劃分

應屆畢業一般就是初級了。 工作一年到兩年就可以是中級了 工作一般會有一萬左右。 高級工程師 理論上也沒什麼,但是得有一個產品帶去跳槽,能力不一定很強的, 高級的話,看公司,一萬多到2,3萬一月。

❷ NodeJS會是曇花一現嗎

在用了一年以後,我感覺node.js有一點不對勁。它很有意思,但是我覺得我應該用另外一個視角去審視它。

網路編程真的可以更容易嗎?

node.js無疑有一些設計非常好的地方。前段時間我寫了一個性能非常高的Syslog Collector系統,它可以每秒處理25萬個日誌,可以同時處理數千個TCP並發連接。它還支持UDP,HTTP和SSL.它是C++寫的,使用了
Boost.Asio 架構。它幾乎從來不會崩潰。 很少會內存泄露。但是它花了我5個月的時間去編輯(然後重寫),測試還有布署。所以,你要知道,寫相似的node程序真的不會讓你加快開發進度。

需要一個HTTP伺服器?require(導入)
http 模塊,如果你想要一台socket伺服器的話,還需要net模塊。node是一個事件驅動的框架。相對於為每個鏈接創始一個線程模型相比有極大的性能優勢,node.js取得了
twisted無法能取得的成功。 (注* twisted 基於python的非同步驅動框架)

node.js的問題是什麼?

javaScript

讓我們先說JavaScript -
我喜歡用它的閉包,但是這個語言太扯蛋了。甚至是JavaScriptr的鐵桿粉絲都知道它有多可笑。JavaScript the Good
Parts (JavaScript好的方面) 真的是一本很簿的書,對比一下你會覺得很有趣。

你會發現下面的代碼根本不會報錯:

undefined=42

然後你輸入這個看看?

> [] + []
''

為什麼1個空數組加上另外一個空數組會等於空字元串?

然後這個呢?

> [] + [] * 5
'0'

解釋JavaScript為什麼會這樣其實挺困難的。就像為
無數個猴子設計的語言。 所以在線編程是非常重要,你得經常列印一下看看到底會輸出什麼。

調試

我看到的大多數node.js程序員都在用一種非常原始的方式在調試,並不斷地對他們用的工具表示失望。跟蹤回調里不該招聘的異常,在類似Mocha和
Chai的測試框架中,經常會像惡夢一樣。時間不斷地花在尋找為什麼會出錯上面。console.log也許是開發者最常使用的調試工具。

回調地獄

大多數程序員,只要在node上面寫了36個小時的代碼,就會發現callback hell。有些
文章 介紹了一些避免的方法。具有諷刺意味的是,這是node的非同步和事件驅動所天生的。它帶來了很多性能上的優勢,但導致了這種難看和不可靠代碼的產生。

但是我們有
Promises。

是的,我同意。不過如果不是用Bluebird這樣的模塊,我估計大多數node程序員馬上就會放棄。我非常喜歡用Promise模式,它寫出的代碼非常
優美。Promise的鏈式寫法是非常好的實踐。但是它讓你放棄了徹底修復回調地獄的想法。我嚴重懷疑這一點會破壞NodeJS在生產環境應用的可能性。

我只會佔用一個核,但只能用一個核。

node.js總是運行在一個進程里。這讓他進行跨函數和跨模塊的調用更加的簡單。但這並不意味著是沒有代價的,你必須確保你在做出更改的時侯進程不被打斷。但是當你使用多核CPU時,你就無法發揮出其它處理器的性能。你就開始罵娘了。當然node裡面有集群
Cluster 模塊,但是它還處在實驗階段,而且用它你還得重寫你程序的邏輯。你最初的設計可能很少考慮到需要分布式處理的情況。

那麼該怎麼辦?

寫高性能的網路和分布式程序是當代程序員應有的基本素質。框架應該降低內容的切換——像node一樣,允許我們創建高性能的伺服器。但是還有比node.js更好的框架。

Go 是一個很好的侯選對象。它基於一個健壯的庫,為網路編程而設計。而且編寫伺服器像node一樣容易。
Goroutines 允許程序員不必擔心回調式的書寫方式,讓程序員以更自然的,線性的思維去思考。而且Goroutines真的非常輕量級而且內容切換比操作系統的線程間切換更輕量,這種系統級的線程操作正是node.js想要避免的。

Go可以最大可能地發揮多核的優勢。這是它的基因。我寫了很多Go的代碼,而且它的體驗要比node要好很多。

不要把我的話當回事

我的node和JavaScript經驗並不像C/C++或Python那樣豐富。但是我的直覺告訴我node.js只是我們朝著向更好的網路編程邁進的一步。它已經解決很多問題了,但是應該還有更好的方法。
轉載

❸ nodejs寫的後台程序必要要運行才能讓前端調用嗎

1、是一個文件一個文件的存在伺服器上的。但是這些文件中一些涉及服務的文件在啟動之後,就會被讀入內存中進行解析執行,不再能修改了。如果要改文件,需要重新啟動這些文件。而我們傳統的用php或者asp,都是當用戶訪問到一個文件,伺服器才會啟動這個文件相關的程序去解析執行。
2、可以的。以前,我們只能用js寫前台文件,有了nodejs,你可以用它開發後台程序了,比如伺服器程序,比如資料庫。基本上web的所有功能他都能做了。
3、nodejs不是js,他是使用了js語言的一個框架環境,就像。net環境不等於c#語言一樣。你只是會js,還是開發不了nodejs,你需要了解一些伺服器程序的特點,還需要對nodejs這樣的框架有所了解。然後才能用js來做一些事情。所以你會發現,實際上nodejs並不是那麼完美,對於一個程序員使用現成的輪胎還是自己造輪胎,完全是另一回事。js,php,java,c#,哪個程序員是只會一種語言的?熟能生巧的事兒。對於初學者來說,還是學好c,學好數據結構,學好操作系統,學好基礎的東西才是最關鍵的。不要執著於某種語言。

❹ 前端人學後端語言是NodeJS好還是PHP好

有興趣或者有精力的話兩個都學 都了解一下。學Node.js對前端比較有幫助,大有裨益,而深入學習的話將引出一系列技術棧包括但不限於jade,ejs,less,express,mongodb, Mongoose ,npm,gulp,模塊化,中間件,WebSocket,Socket.io,RESTful架構,測試Mocha + should.js以及bootstrap等.

❺ Node.js 與 Python 作為後端服務的編程語言各有什麼優劣

一. NodeJS的特點

我們先來看看NodeJS官網上的介紹:

Node.jsis a platform built on Chrome』sJavaScriptruntime for easily building fast, scalable network applications.node.jsuses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.

其特點為:
1. 它是一個Javascript運行環境

2. 依賴於Chrome V8引擎進行代碼解釋

3. 事件驅動

4. 非阻塞I/O

5. 輕量、可伸縮,適於實時數據交互應用

6. 單進程,單線程

二. NodeJS帶來的對系統瓶頸的解決方案

它的出現確實能為我們解決現實當中系統瓶頸提供了新的思路和方案,下面我們看看它能解決什麼問題。

1. 並發連接

舉個例子,想像一個場景,我們在銀行排隊辦理業務,我們看看下面兩個模型。

(1)系統線程模型:

這種模型的問題顯而易見,服務端只有一個線程,並發請求(用戶)到達只能處理一個,其餘的要先等待,這就是阻塞,正在享受服務的請求阻塞後面的請求了。

(2)多線程、線程池模型:

這個模型已經比上一個有所進步,它調節服務端線程的數量來提高對並發請求的接收和響應,但並發量高的時候,請求仍然需要等待,它有個更嚴重的問題。到代碼層面上來講,我們看看客戶端請求與服務端通訊的過程:

服務端與客戶端每建立一個連接,都要為這個連接分配一套配套的資源,主要體現為系統內存資源,以PHP為例,維護一個連接可能需要20M的內存。這就是為什麼一般並發量一大,就需要多開伺服器。

那麼NodeJS是怎麼解決這個問題的呢?我們來看另外一個模型,想像一下我們在快餐店點餐吃飯的場景。

(3)非同步、事件驅動模型

我們同樣是要發起請求,等待伺服器端響應;但是與銀行例子不同的是,這次我們點完餐後拿到了一個號碼,拿到號碼,我們往往會在位置上等待,而在我們後面的請求會繼續得到處理,同樣是拿了一個號碼然後到一旁等待,接待員能一直進行處理。

等到飯菜做號了,會喊號碼,我們拿到了自己的飯菜,進行後續的處理(吃飯)。這個喊號碼的動作在NodeJS中叫做回調(Callback),能在事件(燒菜,I/O)處理完成後繼續執行後面的邏輯(吃飯),這體現了NodeJS的顯著特點,非同步機制、事件驅動整個過程沒有阻塞新用戶的連接(點餐),也不需要維護已經點餐的用戶與廚師的連接。

基於這樣的機制,理論上陸續有用戶請求連接,NodeJS都可以進行響應,因此NodeJS能支持比Java、PHP程序更高的並發量雖然維護事件隊列也需要成本,再由於NodeJS是單線程,事件隊列越長,得到響應的時間就越長,並發量上去還是會力不從心。

總結一下NodeJS是怎麼解決並發連接這個問題的:更改連接到伺服器的方式,每個連接發射(emit)一個在NodeJS引擎進程中運行的事件(Event),放進事件隊列當中,而不是為每個連接生成一個新的OS線程(並為其分配一些配套內存)。

2. I/O阻塞

NodeJS解決的另外一個問題是I/O阻塞,看看這樣的業務場景:需要從多個數據源拉取數據,然後進行處理。

(1)串列獲取數據,這是我們一般的解決方案,以PHP為例

假如獲取profile和timeline操作各需要1S,那麼串列獲取就需要2S。

(2)NodeJS非阻塞I/O,發射/監聽事件來控制執行過程

NodeJS遇到I/O事件會創建一個線程去執行,然後主線程會繼續往下執行的,因此,拿profile的動作觸發一個I/O事件,馬上就會執行拿timeline的動作,兩個動作並行執行,假如各需要1S,那麼總的時間也就是1S。它們的I/O操作執行完成後,發射一個事件,profile和timeline,事件代理接收後繼續往下執行後面的邏輯,這就是NodeJS非阻塞I/O的特點。

總結一下:Java、PHP也有辦法實現並行請求(子線程),但NodeJS通過回調函數(Callback)和非同步機制會做得很自然。

三. NodeJS的優缺點

優點:1. 高並發(最重要的優點)

2. 適合I/O密集型應用

缺點:1. 不適合CPU密集型應用;CPU密集型應用給Node帶來的挑戰主要是:由於JavaScript單線程的原因,如果有長時間運行的計算(比如大循環),將會導致CPU時間片不能釋放,使得後續I/O無法發起;

解決方案:分解大型運算任務為多個小任務,使得運算能夠適時釋放,不阻塞I/O調用的發起;

2. 只支持單核CPU,不能充分利用CPU

3. 可靠性低,一旦代碼某個環節崩潰,整個系統都崩潰

原因:單進程,單線程

解決方案:(1)Nnigx反向代理,負載均衡,開多個進程,綁定多個埠;

(2)開多個進程監聽同一個埠,使用cluster模塊;

4. 開源組件庫質量參差不齊,更新快,向下不兼容

5. Debug不方便,錯誤沒有stack trace

四. 適合NodeJS的場景

1. RESTful API

這是NodeJS最理想的應用場景,可以處理數萬條連接,本身沒有太多的邏輯,只需要請求API,組織數據進行返回即可。它本質上只是從某個資料庫中查找一些值並將它們組成一個響應。由於響應是少量文本,入站請求也是少量的文本,因此流量不高,一台機器甚至也可以處理最繁忙的公司的API需求。

2. 統一Web應用的UI層

目前MVC的架構,在某種意義上來說,Web開發有兩個UI層,一個是在瀏覽器裡面我們最終看到的,另一個在server端,負責生成和拼接頁面。

不討論這種架構是好是壞,但是有另外一種實踐,面向服務的架構,更好的做前後端的依賴分離。如果所有的關鍵業務邏輯都封裝成REST調用,就意味著在上層只需要考慮如何用這些REST介面構建具體的應用。那些後端程序員們根本不操心具體數據是如何從一個頁面傳遞到另一個頁面的,他們也不用管用戶數據更新是通過Ajax非同步獲取的還是通過刷新頁面。

3. 大量Ajax請求的應用

例如個性化應用,每個用戶看到的頁面都不一樣,緩存失效,需要在頁面載入的時候發起Ajax請求,NodeJS能響應大量的並發請求。總而言之,NodeJS適合運用在高並發、I/O密集、少量業務邏輯的場景。

Python的優缺點

優點

簡單————Python是一種代表簡單主義思想的語言。閱讀一個良好的Python程序就感覺像是在讀英語一樣,盡管這個英語的要求非常嚴格!Python的這種偽代碼本質是它最大的優點之一。它使你能夠專注於解決問題而不是去搞明白語言本身。

易學————就如同你即將看到的一樣,Python極其容易上手。前面已經提到了,Python有極其簡單的語法。

免費、開源————Python是FLOSS(自由/開放源碼軟體)之一。簡單地說,你可以自由地發布這個軟體的拷貝、閱讀它的源代碼、對它做改動、把它的一部分用於新的自由軟體中。FLOSS是基於一個團體分享知識的概念。這是為什麼Python如此優秀的原因之一——它是由一群希望看到一個更加優秀的Python的人創造並經常改進著的。

高層語言————當你用Python語言編寫程序的時候,你無需考慮諸如如何管理你的程序使用的內存一類的底層細節。

可移植性————由於它的開源本質,Python已經被移植在許多平台上(經過改動使它能夠工作在不同平台上)。如果你小心地避免使用依賴於系統的特性,那麼你的所有Python程序無需修改就可以在下述任何平台上面運行。這些平台包括linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至還有PocketPC、Symbian以及Google基於linux開發的Android平台!

解釋性————這一點需要一些解釋。一個用編譯性語言比如C或C++寫的程序可以從源文件(即C或C++語言)轉換到一個你的計算機使用的語言(二進制代碼,即0和1)。這個過程通過編譯器和不同的標記、選項完成。當你運行你的程序的時候,連接/轉載器軟體把你的程序從硬碟復制到內存中並且運行。而Python語言寫的程序不需要編譯成二進制代碼。你可以直接從源代碼 運行 程序。在計算機內部,Python解釋器把源代碼轉換成稱為位元組碼的中間形式,然後再把它翻譯成計算機使用的機器語言並運行。事實上,由於你不再需要擔心如何編譯程序,如何確保連接轉載正確的庫等等,所有這一切使得使用Python更加簡單。由於你只需要把你的Python程序拷貝到另外一台計算機上,它就可以工作了,這也使得你的Python程序更加易於移植。

面向對象————Python既支持面向過程的編程也支持面向對象的編程。在「面向過程」的語言中,程序是由過程或僅僅是可重用代碼的函數構建起來的。在「面向對象」的語言中,程序是由數據和功能組合而成的對象構建起來的。與其他主要的語言如C++和Java相比,Python以一種非常強大又簡單的方式實現面向對象編程。

可擴展性————如果你需要你的一段關鍵代碼運行得更快或者希望某些演算法不公開,你可以把你的部分程序用C或C++編寫,然後在你的Python程序中使用它們。

可嵌入性————你可以把Python嵌入你的C/C++程序,從而向你的程序用戶提供腳本功能。

豐富的庫————Python標准庫確實很龐大。它可以幫助你處理各種工作,包括正則表達式、文檔生成、單元測試、線程、資料庫、網頁瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統、GUI(圖形用戶界面)、Tk和其他與系統有關的操作。記住,只要安裝了Python,所有這些功能都是可用的。這被稱作Python的「功能齊全」理念。除了標准庫以外,還有許多其他高質量的庫,如wxPython、Twisted和Python圖像庫等等。

概括————Python確實是一種十分精彩又強大的語言。它合理地結合了高性能與使得編寫程序簡單有趣的特色。

規范的代碼————Python採用強制縮進的方式使得代碼具有極佳的可讀性。

缺點

強制縮進

這也許不應該被稱為局限,但是它用縮進來區分語句關系的方式還是給很多初學者帶來了困惑。即便是很有經驗的Python程序員,也可能陷入陷阱當中。最常見的情況是tab和空格的混用會導致錯誤,而這是用肉眼無法分別的。

單行語句和命令行輸出問題

很多時候不能將程序連寫成一行,如import sys;for i in sys.path:print i。而perl和awk就無此限制,可以較為方便的在shell下完成簡單程序,不需要如Python一樣,必須將程序寫入一個.py文件。(對很多用戶而言這也不算是限制)

NO.1 運行速度,有速度要求的話,用C++改寫關鍵部分吧。

NO.2 國內市場較小(國內以python來做主要開發的,目前只有一些web2.0公司)。但時間推移,目前很多國內軟體公司,尤其是游戲公司,也開始規模使用他。

No.3 中文資料匱乏(好的python中文資料屈指可數)。托社區的福,有幾本優秀的教材已經被翻譯了,但入門級教材多,高級內容還是只能看英語版。

NO.4 構架選擇太多(沒有像C#這樣的官方.net構架,也沒有像ruby由於歷史較短,構架開發的相對集中。Ruby on Rails 構架開發中小型web程序天下無敵)。不過這也從另一個側面說明,python比較優秀,吸引的人才多,項目也多。

❻ nodeJS中,非同步的具體實現者是什麼

在現在的項目開發中,任何一個大型項目絕對不是簡簡單單的採用一個種語言和一種框架,因為每種語言和框架各有優勢,與其死守一個,不與取各家之所長,依次得到一個高性能、搞擴展的產品。

對於一個.NET開發者,尤其是主要從事Web開發的.NET程序員,個人覺得有必要學習一門性能優越的Web平台開發語言。一個開發者不能簡簡單單的只學習一門語言,思維應該開闊,從各個方面去看待同樣的一個問題,這樣或許會得到另一番效果和見解,個人認為應該學習一下其他的語言,這樣有利於我們對比語言的優勢和缺點,例如java、nodejs、python等等。對於Nodejs這個JavaScript平台,個人覺得.NET程序員有必要學習一下,因為學習NodeJS有助於我們構建一個高性能的Web平台。

NodeJS具有事件驅動、非阻塞I/O等特點,可以很好的處理I/O操作。Node面向網路且擅長並行I/O,能夠有效地組織起更多的硬體資源。

這篇博客就來簡單的介紹一下NodeJS的非同步I/O特點。

一.NodeJS概述:

要學習一個語言或者平台,我們首先應該知道其定義,依據定義來擴展我們的學習思路。Node的定義:」一個大獎在Chrome JavaScript運行時上的平台,用於構建高速、可伸縮的網路程序。NodeJS作為一個非同步事件驅動的JavaScript運行時,旨在構建可擴展的網路應用程序。「有關nodejs的背景介紹和安裝方法,這里就沒有必要介紹了,因為對於nodejs的安裝是比較簡單,所以在這里贅述就有些顯得浪費時間。

學習完Node的定義特點,可能很多人都會好奇這個平台的適用場景是什麼,以便在實際的項目開發中應用,不然學習這個就沒有意義。主要的應用場景:前後端編程語言環境統一;高性能I/O用於實時應用;並行I/O使得使用者可以更高效地利用分布式環境;並行I/O有效利用穩定介面提升Web渲染能力;雲平台的支持;游戲開發(這可能是很多開發者在意的,畢竟現在的游戲開發火熱程度已經到了無以附加的地步);工具類應用,與較多的工具方法,使得開發效率大大的提升。

NodeJS非同步I/O模型的基本要素:事件循環、觀察者、請求對象、I/O線程池這四個共同構成。接下來我們具體了解一下這些知識。

二.NodeJS非同步I/O解析:

對於Nginx伺服器,很多人都是比較的熟悉,Nginx採用純C編寫而成,用於做Web伺服器,在反向代理和負載均衡等服務方面有很好的優勢。Node與Nginx伺服器有著相似的地方,都是採用事件驅動。

瀏覽器中JavaScript在單線程上執行,而且還與UI渲染共用一個線程,JavaScript在執行的時候UI渲染和響應應是出於停滯狀態。(如果腳本執行的時間超過100毫秒,用戶就會感到頁面卡頓)。遇到這些情況,我們就會想到非同步的方式消除這些等待的問題,對於非同步和同步的概念就不做介紹了。

=接下來我們具體的來了解一下NodeJS的事件驅動和非阻塞I/O這些特點,了解這些對於我們更好的學習NodeJS開發和構建高性能的Web平台有更加深遠的意義。

1.I/O操作概述:

I/O操作對於任何一個開發者來說都不會陌生,現在我們就簡單的談一下NodeJS的I.O操作。I/O操作分為:單線程串列依次執行;多線程並行執行。這兩種方式各有優勢和缺點,多線程的代價在於創建線程和執行期線程上下文切換的開銷較大,並且多線程面臨鎖、狀態同步的問題。單線程安裝順序執行,在執行中任何一個稍慢都會導致後續執行代碼阻塞。對於任務的串列執行(概念上類似於同步執行)和任務的並行執行的描述有如下圖:

varconfig=require('./config.json');
varfs=require("fs");
varhttp=require('http');
varurl_mole=require("url");

http.createServer(function(request,response){
varkey=url_mole.parse(request.url).query.replace('key=','');
switch(request.method){
case'GET'://
fs.readFile(config.dataPath+key,'utf8',function(err,value){
if(err){
//ReturnFileNotFoundiffilehasn'tyetbeencreated
response.writeHead(404,{'Content-Type':'text/plain'});
response.end("Thefile("+config.dataPath+key+")doesnotyetexist.");
}else{
//Ifthefileexists,
varsorted=value.split(config.sortSplitString).sort().join('');
response.writeHead(200,{'Content-Type':'text/plain'});
response.end(sorted);
}
});
break;
case'POST'://
varpostData='';
request
.on('data',function(data){
postData+=data;
})
.on('end',function(){
fs.appendFile(config.dataPath+key,postData,function(err){
if(err){
//Returnerrorifunabletocreate/appendtothefile
response.writeHead(400,{'Content-Type':'text/plain'});
response.end('Error:Unabletowritefile:'+err);
}else{
//,return"success"response
response.writeHead(200,{'Content-Type':'text/plain'});
response.end('success');
}
});
});
break;
default:
response.writeHead(400,{'Content-Type':'text/plain'});
response.end("Error:BadHTTPmethod:"+request.method);
}
}).listen(config.serverPort);

console.log('synchronousserverisrunning:',config.serverPort);

四.總結:

這篇博文是個人初次嘗試NodeJS的一個小總結,如有寫的不好還望大家多多的包含和指正。對於程序員來說,需要做的就是一直不停的學習,無論是否是自己主要從事的語言,對於學習多種語言,可以更加有助我們了解編程,對於一個開發者來說,最終的就是思想,因為語言的特性和框架的應用,一個熟練的編程者學習起來並不是難事,難就難在我們對於語言和框架的設計理念的理解。

❼ 為什麼Paypal選用NodeJS替代java,很有參考價值

呵呵,站在架構師的角度,判斷用戶的需求,來選擇不同的語言,不同的框架,這是基礎。
nodejs替代java,簡單的說,就是程序員不想為以前買單。舊的代碼已經問題重重,那麼新加入者要麼推到重來,要麼小修小改,逐步完善。如果使用舊有的java,肯定會有不少老員工對這種改動提出意見,乾脆全部用新的,不考慮和以前的兼容,這樣最省心。

從資料來看,雖然號稱8周改寫了paypal,其實之前化了幾個月研究和完善node.js框架。這個代價絕對不小。在paypal的工程師研究框架的同時其實就等同於同時在設計。按我們以前的經驗,設計,開發,測試的比例是 2:1:2,也可以看出來了項目不小。

❽ 如今2016年了,nodejs在中國發展到了什麼地步

中國沒多少人用。 二線城市招不到人, 老程序員各種不爽nodejs: 不少人認為node是一個玩具,是前端程序員用的, 只有java才是工業級語言。

❾ nodejs的優勢

NodeJs的優勢:

現在的很多的伺服器端的語言(PHP,JAVA,ASP.net),有什麼問題呢,現在的伺服器端的語言在用戶訪問伺服器時,為每個用戶鏈接創建了一個線程,但每個線程大約要耗費2M的內存,如果一個8G內存的伺服器,也就能鏈接4000個左右的用戶,如果用戶的鏈接數較大,就必須增加伺服器的數量,而且現在用戶的鏈接方式有很多(如app,網頁同時訪問),這就又涉及到伺服器共享的問題,所以伺服器怎麼支持最大的同時鏈接用戶量就成了一個問題;
NodeJS修改了客戶端到伺服器端的鏈接方法,解決了這個問題,他不在為每個客戶端創建一個新的線程,而是為每個客戶端鏈接出發一個NodeJs內部進行處理的事件,所以NodeJS具備同時處理多達幾萬個用戶的客戶端鏈接的能力;
NodeJS適合開發的應用程序:

當應用程序需要處理大量並發的輸入/輸出,而在向客戶端發出響應之前,應用程序內部並不需要進行非常復雜的處理的時候,我們應該考慮使用NodeJs來進行應用程序的開發,例如:
1、聊天伺服器:如果聊天的人很多,用戶的與伺服器之間的並發鏈接量很大,但是伺服器端的數據處理並不復雜;
2、綜合類服務網站和電子商務網站的伺服器:在這類網站中的伺服器端,往往可能每秒存內可以接受多達上千條的數據並且需要將這些數據寫入資料庫中,NodeJs可以通過其隊列機制將這些數據迅速寫入緩存區中,然後再通過每一個單獨的處理從緩存區中取出這些數據並將其寫入資料庫中,如果是其他的伺服器(如Apache伺服器或Tomcat伺服器)的話,由於這些伺服器採用的是阻塞型I/O機制,因此每條數據寫入到資料庫中都要等待一段時間(等上一條寫完,才能寫下一條),但是NodeJs使用的是非阻塞的I/O機制,因此可以實現這些數據到資料庫中的寫入,而不必再為每條數據的寫入而等待一段時間;
總結:
一個規模稍微大點的系統都不是一種開發語言可以搞定的,往往是幾種混雜一起,比如c、c++做伺服器端開發,java做業務邏輯,php等做前端展示,此外還需要消息中間件等等。
nodejs可以很快地在伺服器端做原型(原來只有c系和java等能做的事情,性能還很高),而且代碼量相對會少很多;另一點是它的語法優勢,js閉包等。但它不太適合做cpu密集型處理的工作,只能繞著彎去解決,據說這次QCon會有人分享這方面的研究成果,可以關注下。
每種語言都有它適合的領域,沒必要強求一門語言可以解決所有事情,擁有其它語言的特性,只有不斷的tradeoff把系統做出來才是目標。這些都是叢書上看到總結的,還望指正

閱讀全文

與nodejs程序員相關的資料

熱點內容
如何創建mc伺服器地址 瀏覽:677
伺服器怎麼開通所有埠 瀏覽:119
程序員那麼可愛分集介紹 瀏覽:579
vscode查看包源碼 瀏覽:555
帶命令行提示的安全模式xp 瀏覽:922
哪個app沒有vip可以看電視 瀏覽:203
編程思維之我見 瀏覽:533
胸椎壓縮性骨折手術後要吃葯嗎 瀏覽:405
python串口編程器 瀏覽:249
影樓底片壓縮 瀏覽:620
天津雲伺服器雲主機 瀏覽:389
如何自學單片機 瀏覽:572
餓了么app怎麼查騎手日均送單 瀏覽:827
javaredis數組 瀏覽:129
中國編程達人 瀏覽:105
java怎麼進基岩版伺服器 瀏覽:976
vb如何連接遠程opc伺服器 瀏覽:739
ug編程五軸培訓難不難學 瀏覽:777
vs添加編譯環境 瀏覽:616
讓電腦重啟的命令 瀏覽:657