1.介紹一下事件驅動程式設計---快餐店點餐。
在基於執行緒的方式中(thread-based way)你到了櫃檯前,把你的點餐單給收銀員或者給收銀員直接點餐,然後等在那直到你要的食物準備好給你。收銀員不能接待下乙個人,除非你拿到食物離開。想接待更多的客戶,容易!加更多的收銀員!
當然,我們知道快餐店其實不是這樣工作的。他們其實就是基於事件驅動方式,這樣收銀員更高效。只要你把點餐單給收銀員,某個人已經開始準備你的食物,而同時收銀員在進行收款,當你付完錢,你就站在一邊而收銀員已經開始接待下乙個客戶。在一些餐館,甚至會給你乙個號碼,如果你的食物準備好了,就呼叫你的號碼讓你去櫃檯取。關鍵的一點是,你沒有阻塞下乙個客戶的訂餐請求。你訂餐的食物做好的事件會導致某個人做某個動作(某個服務員喊你的訂單號碼,你聽到你的號碼被喊到去取食物),在程式設計領域,我們稱這個為**(callback function)。
2.node.js做了什麼工作呢?
傳統的web server多為基於執行緒模型。你啟動apache或者什麼server,它開始等待接受連線。當收到乙個連線,server保持連線連通直到頁面或者什麼事務請求完成。如果他需要花幾微妙時間去讀取磁碟或者訪問資料庫,web server就阻塞了io操作(這也被稱之為阻塞式io).想提高這樣的web server的效能就只有啟動更多的server例項。
相反的,node.js使用事件驅動模型,當web server接收到請求,就把它關閉然後進行處理,然後去服務下乙個web請求。當這個請求完成,它被放回處理佇列,當到達佇列開頭,這個結果被返回給使用者。這個模型非常高效可擴充套件性非常強,因為webserver一直接受請求而不等待任何讀寫操作。(這也被稱之為非阻塞式io或者事件驅動io)
考慮下面這個過程:
1,你用瀏覽器訪問nodejs伺服器上的"/about.html"
2,nodejs伺服器接收到你的請求,呼叫乙個函式從磁碟上讀取這個檔案。
3,這段時間,nodejs webserver在服務後續的web請求。
4,當檔案讀取完畢,有乙個**函式被插入到nodejs的服務佇列中。
5,nodejs webserver執行這個函式,實際上就是渲染(render)了about.html頁面返回給你的瀏覽器。
nodejs的一些理解
if exist dp0 node.exe dp0 node.exe dp0 node modules node inspector bin inspector.js else setlocal set pathext pathext js node dp0 node modules node in...
nodejs中流 stream 的理解
nodejs的fs模組並沒有提供乙個copy的方法,但我們可以很容易的實現乙個,比如 var source fs.readfilesync path to source fs.writefilesync path to dest source 如上面高大上的所示,我們把檔案比作裝水的桶,而水就是檔案...
nodejs的事件驅動理解
引入 events 模組 var events require events 建立 eventemitter 物件 var eventemitter new events.eventemitter 建立監聽例項 繫結事件及事件的處理程式 eventemitter.on eventname event...