這幾天在學(xué)習(xí)node崭放,以下的筆記主要是自己看《Node.js開(kāi)發(fā)指南》的筆記,下面的內(nèi)容主要是1到4章的
單線程值骇、異步式I/O莹菱、事件驅(qū)動(dòng)式的程序設(shè)計(jì)模型
Node.Js是可以讓JavaScript運(yùn)行在服務(wù)器端的開(kāi)發(fā)平臺(tái)
Node.js內(nèi)建了一個(gè)HTTP服務(wù)器支持,也就是你可以輕而易舉地實(shí)現(xiàn)一個(gè)網(wǎng)站和服務(wù)器的組合
Node.js還可以部署到非網(wǎng)絡(luò)應(yīng)用的環(huán)境下吱瘩,比如一個(gè)命令行工具
Node.js可以調(diào)用C/C++的代碼Node.js在執(zhí)行的過(guò)程中會(huì)維護(hù)一個(gè)事件隊(duì)列道伟,程序在執(zhí)行時(shí)進(jìn)入事件循環(huán)等待下一個(gè)事件到來(lái),每個(gè)異步式I/O請(qǐng)求完成后會(huì)被推送到事件隊(duì)列中使碾,等待程序進(jìn)程進(jìn)行處理
內(nèi)存上下文切換蜜徽??
回調(diào)函數(shù)很重要
Node.js的異步機(jī)制是基于事件的票摇,所有的I/O拘鞋、網(wǎng)絡(luò)通信、數(shù)據(jù)庫(kù)查詢都以非阻塞的方式請(qǐng)求矢门,返回的結(jié)果由事件循環(huán)處理
第三章 Node.js的快速入門
node script.js 其中script.js 就是腳本的文件名
node -e "console.log('Hello')"
Node的REPL模式,REPL
(Read-eval-print loop)
盆色,即輸入—求值—輸出循環(huán)兩次Ctrl+c退出該模式
使用supervisor可以實(shí)現(xiàn)“熱加載
supervisor 文件名
當(dāng)線程遇到I/O操作時(shí)候灰蛙,不會(huì)以阻塞的方式等待I/O操作的完成或者數(shù)據(jù)的返回,而是將I/O請(qǐng)求發(fā)送給操作系統(tǒng)隔躲,繼續(xù)執(zhí)行下一條語(yǔ)句摩梧。當(dāng)操作系統(tǒng)完成I/O操作時(shí)候,以事件的形式通知I/O操作的線程宣旱,線程會(huì)在待定的時(shí)間處理這個(gè)事件
單線程仅父、非阻塞
I/O部分和計(jì)算部分。通常I/O部分占用的時(shí)間比計(jì)算的部分多得多
- 異步式I/O比傳統(tǒng)的多線程阻塞式I/O少了多線程的開(kāi)銷
EventEmitter
require不會(huì)重復(fù)加載模塊
覆蓋exports
exports
使用module.exports = Hello
代替exports.Hello = Hello
CommonJs規(guī)范應(yīng)該具備以下特征:
npm是node官方提供的包管理工具
獲取一個(gè)包
npm [install/i] [package_name]
本地模式和全局模式
npm [install/i] -g [package_name]
本地模式不會(huì)注冊(cè)PATH環(huán)境變量浑吟,僅僅是把包安裝到node_modules子目錄下笙纤,其中的bin目錄沒(méi)有包含在PATH環(huán)境變量中,不能在命令行中調(diào)用
使用全局模式安裝的包并不能直接在 JavaScript 文件中用require獲得组力,因?yàn)?require 不會(huì)搜索 /usr/local/lib/node_modules/省容。
npm link
不支持Windows通過(guò)使用
npm init
可以根據(jù)交互式問(wèn)答產(chǎn)生一個(gè)符合標(biāo)準(zhǔn)的package.jsonnpm pubilsh
發(fā)布包 package.json中修改version字段,重新使用npm publish
重新發(fā)布node中的全局對(duì)象是global忿项,所有的全局變量(除了global本身以外)都是global對(duì)象的屬性
process就是一個(gè)全局變量蓉冈,即global對(duì)象的屬性。它用于描述當(dāng)前node進(jìn)程狀態(tài)的對(duì)象轩触,提供一個(gè)與操作系統(tǒng)的簡(jiǎn)單接口
process.nextTick(callback)
的功能是為事件循環(huán)設(shè)置一項(xiàng)任務(wù)寞酿,Node.js會(huì)在下一次事件循環(huán)響應(yīng)時(shí)候調(diào)用callback常用工具util是node的核心模塊,提供常用函數(shù)的集合脱柱,用于彌補(bǔ)核心JavaScript的功能過(guò)于精簡(jiǎn)的不足
util.inherit(constructor,superConstructor)
是一個(gè)實(shí)現(xiàn)對(duì)象間原型繼承的函數(shù)
util.inspect(object,[showHidden],[depth],[])
是將任意對(duì)象轉(zhuǎn)換成字符串的方法伐弹,通常用于調(diào)試或者錯(cuò)誤輸出對(duì)于每個(gè)時(shí)間,EventEmitter支持若干個(gè)事件監(jiān)聽(tīng)器
Node標(biāo)準(zhǔn)庫(kù)提供了http模塊榨为,其中封裝了高效的HTTP服務(wù)器和一個(gè)簡(jiǎn)易的HTTP客戶端
http.Server是HTTP模塊中的HTTP服務(wù)器對(duì)象惨好,用Node.js做的所有基于HTTP協(xié)議的系統(tǒng),如網(wǎng)站随闺、社交應(yīng)用甚至代理服務(wù)器日川,都是基于http.Server實(shí)現(xiàn)的
http.Server的事件
對(duì)它的事件編寫響應(yīng)函數(shù)即可實(shí)現(xiàn)http服務(wù)器的所有功能
request
connection
closehttp.createServer([requestListener])
功能是創(chuàng)建一個(gè)HTTP服務(wù)器并將requestListener作為request事件的監(jiān)聽(tīng)函數(shù)http.ServerRequest
是HTTP請(qǐng)求的信息
一般由http.Server的request事件發(fā)送的,作為第一個(gè)參數(shù)進(jìn)行傳遞
以下3個(gè)事件用于控制請(qǐng)求體傳輸
data
end
close
-
http.ServerResponse
是返回給客戶端的信息矩乐,決定了用戶最后能夠看到的內(nèi)容龄句。也是有http.Server
的request事件發(fā)送的,作為第二個(gè)參數(shù)進(jìn)行傳遞
- http模塊提供兩個(gè)函數(shù)http.request和http.get散罕,功能是作為客戶端向http服務(wù)器發(fā)起請(qǐng)求
http.request(options,callback)
發(fā)起http請(qǐng)求分歇。option是類似關(guān)聯(lián)數(shù)組的對(duì)象,表示請(qǐng)求的參數(shù)欧漱,callback是請(qǐng)求的回調(diào)函數(shù)
-
http.ClientRequest
是由http.request或者http.get返回的對(duì)象职抡,表示一個(gè)已經(jīng)產(chǎn)生而且正在進(jìn)行的http請(qǐng)求