javascript
学习NodeJS第一天:node.js引言
Node.JS 是資深 C 程序猿 Ryan Dahl(http://four.livejournal.com/)的作品,根據 Google 著名的開源 JavaScript 引擎 V8 來進行二次開發的 Web I/O server(http://nodejs.org/)。V8 本身是很快的 JavaScript 引擎,處理 JS 執行執行的速度很高。相關測試表明,FireFox、Opera 和 IE 的 JS 引擎速度都不及 V8 來得快。并且,還能夠說,僅僅要瀏覽器之間的 JS 引擎大戰一日不減,NodeJs 就能夠從中受益。有競爭才有進步:)。
NodeJS 基本使用方法也是十分簡單明了的,我們看看一下這一句,就是最簡單的代碼:
var sys = require('sys') ,http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.write('Hello World'); res.close(); }).listen(8006); sys.puts('Server running at http://127.0.0.1:8006/');
以上語句 var http = require('http');http.createServer(function (req, res) {…}); 就是創建一個 HTTP server,偵聽來自client的請求,匿名參數中的 req 和 res 分別代表請求對象和響應對象。NodeJS 把邏輯語句寫在一個函數中,說明創建server createServer() 連這一步驟都是異步的!并且除此之外,req 也有相關的異步操作:
http.createServer(function (req, res) { req.addListener("end",function(){ sys.puts("request end"); }); res.writeHead(200, {'Content-Type': 'text/plain'}); res.write('Hello World'); res.close(); }).listen(8006);
這樣就對請求 req 登記了 end 的事件。在請求結束時通過 sys.puts 方法添�"request end"。在使用事件的過程中,實質也算是一個異步過程,非同步的。
從宏觀層面看以上的演示,上面不過一個比較底層的操作,都是低層次的控制,不足以提供很多其它 High Level 邏輯。要增強 NodeJS 這個平臺功能,我們能夠使用其它環繞 NodeJS 而開發模塊,甚至是一個初具規模的“框架”,——當中一個就是 Express(http://github.com/visionmedia/express)。安裝 Express 的前提是安裝還有一個依賴包:Kiwi(http://github.com/visionmedia/kiwi),然后鍵入kiwi -v install express 才干夠正式安裝 Express。安裝好 Express 之后,立馬輸入以下代碼測試一下:
var sys = require("sys"), kiwi = require("kiwi"), express = kiwi.require('express'); get('/', function(){ this.redirect('/hello/world') }); get('/hello/world', function(){ return 'Hello World' }); get('/goodbye/world', function(){ return 'Goodbye World' }); run();
Express 執行的 URL 和port是 http://localhost:3000,默認請求的規則都會被轉移到 /hello/world 文件夾,返回 'Hello World' 的字符串。訪問 /goodbye/world 文件夾就返回 'Goodbye World'。Express 之所以被稱為一個“框架”,應該還有其它的功能在內,比如請求路由、渲染視圖的其它高級功能。
Webserver的事件編程其意義
我們知道而且十分清楚,JavaScript 是單線程的(就當前流行的 js v1.5而言),怎么避免 I/O 通道上的堵塞(block)呢?——基于事件驅動(Event-based)的編程或者或者是一種可行之道,為不少后臺程序解決線程/堵塞之用。自從 Viusal Basic 流行起,基于事件驅動的編程模型在GUI之上早已為我們所熟悉,存在非常長的一段時間了。若說上早期的開發,那時我們常常的一個做法,就是在main()方法寫一個無限循環(while(true) loop),從而獲得控制不論什么時刻程序的能力,亦算是一種樸素的“事件”模型。我們清楚,JavaScript天然是Function First Level的,對一個函數還能夠送入一個函數的參數(即傳入一個閉包closure),換言之,JS天生與事件驅動的編程是不謀而合,相得益彰的。鑒于此,Node.js的事件編程理念的確是一個亮點。
另外一點,高并發的 Web server一直乃久經不衰的熱點和話題,或許有非常多的解決方式,性能達到一定的指標也沒有問題,只是問題是,因而,在保證并滿足性能達標的前提下,卻非常少見一個自然、適合編寫業務邏輯的開發平臺,以 JavaScript 為開發語言的 NodeJS 正好符合這一需求,一種符合大多數人需求的 DSL(預計 js 玩家數量可觀得能夠……)。比如,一個簡單的計數器設計,我登錄某個 url,就觸發一個計數器的事件,十分自然。當然,更重要的是,還是 JS 的語言特征,即 Function、閉包、相似的 C 語法、精煉與簡潔的風格等等,尤其 Function,簡直為事件模型而生,輕松吻合 node.js 異步機制的理念,才是真正吸引玩家去樂此不疲的原因。
雖然 NodeJS 如今還很的年輕,也沒有久經世故,只是值得可喜的是,如今涌現了一大批環繞 NodeJS 的插件、增強包,有的是鏈接數據庫,有的是用于 logging、Template模板、單元測試,有的還是服務于長鏈接下(long polling)輪詢的……等等。我們能夠參見 NodeJS 詳細的模塊列表,在http://wiki.github.com/ry/node/modules。
?
分享一個 Node.js 的專題站點,適合剛開始學習的人:
http://howtonode.org/
nodejs與websocket的資源:
http://blog.new-bamboo.co.uk/2009/12/7/real-time-online-activity-monitor-example-with-node-js-and-websocket
http://blog.johngoulah.com/2010/03/nodejs-websockets-and-the-twitter-gardenhose/http://blog.andregoncalves.com/2009/12/29/Nodejs-twitter-streaming-with-html5-websockets.html
寫node.js的插件(C++)
https://www.cloudkick.com/blog/2010/aug/23/writing-nodejs-native-extensions/
在win平臺上跑node.js,借助虛擬機:
http://www.lazycoder.com/weblog/2010/03/18/getting-started-with-node-js-on-windows/
在win直接執行的可執行文件(已編譯):
http://www.grati.org/?page_id=213 不錯的node.js中文資源
轉載于:https://www.cnblogs.com/hrhguanli/p/4002447.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的学习NodeJS第一天:node.js引言的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux Shell编程(4)——sh
- 下一篇: maven实战系列