標籤

2017年2月9日 星期四

Node.js-建立一個最簡單的Server

前言
為什麼全世界都在學Node.js,這是我第一本購入、有關Node.js的工具書,先前我完全沒有接觸過Node.js,連JavaScript都所知甚少,因此打算將一些心得記錄起來,希望對自己的理解及記憶能有所幫助,內容會參雜其他從網路上蒐羅的文章。

重點整理
Node.js能夠做到:
  • Node.js為一個JavaScript執行環境,可獨自建立一個伺服器。
  • 該伺服器不會為每個HTTP連接產生一個新的OS處理程序,而是建立一個處理程序中可執行的事件,意指Node.js的執行方式雖為單一執行緒(Single threaded),但其底層仍是多執行緒,請參考Daniel Khan的文章"How to track down CPU issues in Node.js"。在此引用其部分內文"The famous statement ‘Node.js runs in a single thread’ is only partly true. Actually only your ‘userland’ code runs in one thread. Starting a simple node application and looking at the processes reveals that Node.js in fact spins up a number of threads.This is because Node.js maintains a thread pool to delegate synchronous tasks to, while Google V8 creates its own threads for tasks like garbage collection."。
  • Node.js屬於事件驅動,相比其他語言可以更節省伺服器的記憶體資源。在此引用Node.js官網的部分內文"In other systems there is always a blocking call to start the event-loop. Typically behavior is defined through callbacks at the beginning of a script and at the end starts a server through a block call like EventMachine::run(). In Node there is no such start-the-event-loop call. Node simply enters the event loop after executing the input script. Node exits the event loop when there are no more callbacks to perform. This behavior is like browser JavaScript -- the event loop is hidden from the user."。
結論:
  • Node.js可以解決大量請求、長時間連接所導致的成本問題(如:即時線上聊天室等需要進行多Client端即時回饋的應用)。

安裝步驟
  • 進入Node.js官網,下載與作業系統相符的*.msi檔案,有LTS與Current兩種,個人覺得LTS雖然版本較舊但應該會較為穩定所以選擇LTS。
圖片來源:Node.js官網
  • 依照精靈指示進行安裝即可(註:該書撰寫時仍需要手動加入環境變數,而我下載並安裝時發現已經不需要了)。

實作
撰寫
  • 開啟Notepad++,於新的空白文件輸入程式碼
  • 輸入完畢,儲存成app_1.js檔

執行
  • 開啟Node.js command prompt (安裝Node.js時會一併安裝)
  • 輸入指令,將所在位置移動到app_1.js的檔案位置 ("cd.."可回到上一層資料夾、於C:\輸入"D:"可切換至D槽、"cd 資料夾名稱"可進入該資料夾)
  • 輸入Node.js的執行指令:node app_1.js
  • 開啟瀏覽器,於網址列輸入並搜尋伺服器IP及Port:127.0.0.1:3000
  • 回到Node.js command prompt,按下Ctrl+C,可停止執行,此時再回到瀏覽器並重新整理,會發現已經無法連線至伺服器
執行結果

參考文章
佳魁資訊所出版"為什麼全世界都在學Node.js"
Simen的文章"非同步程式碼之霧:Node.js的事件迴圈與EventEmitter"
Daniel Khan的文章"How to track down CPU issues in Node.js"

沒有留言:

張貼留言