什么是node.js
- 編寫高性能網(wǎng)絡(luò)服務(wù)器的JavaScript工具包
- 單線程赶站、異步过吻、事件驅(qū)動(dòng)
(就是來1w個(gè)請求吏砂,來一個(gè)請求就給這個(gè)請求開辟一個(gè)內(nèi)存塊來處理城瞎?
(事件驅(qū)動(dòng)就是例如來一個(gè)事件崎弃,然后有一個(gè)回調(diào)甘晤,等事件(請求含潘?)結(jié)束,處理回調(diào)线婚? - 特點(diǎn): 快遏弱,耗內(nèi)存多
- 異步消耗內(nèi)存測試:網(wǎng)上一個(gè)百萬級并發(fā)測試,未優(yōu)化的情況下 1M的連接消耗了16G的內(nèi)存
node.js 的劣勢和解決方案
- 默認(rèn)不支持多核塞弊,可用cluster解決
- 默認(rèn)不支持服務(wù)器集群漱逸,node-http-proxy可解決
- 使用nginx做負(fù)載均衡,靜態(tài)由nginx處理游沿,動(dòng)態(tài)由node.js處理
- forever或node-cluster實(shí)現(xiàn)災(zāi)難恢復(fù)
(以上這一些名詞還待詳細(xì)學(xué)習(xí))
安裝
安裝 node.js 官網(wǎng)下載
測試是否安裝成功
npm -v
node -v
hello world
var http = require('http');
// http 創(chuàng)建一個(gè)服務(wù)
// request - 瀏覽器向服務(wù)器請求發(fā)出的對象
// response - 服務(wù)器向?yàn)g覽器寫回的對象
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
console.log('訪問');
response.write('hello,world');
}).listen(8000);
console.log('Server running at http://127.0.0.1:8000/');
/*
啟動(dòng)服務(wù)
cmd下執(zhí)行:
node n1_hello.js
瀏覽器訪問:http://localhost:8000
*/
瀏覽器:
可以看到雖然輸出了文字饰抒,但是瀏覽器還一直在loading
因?yàn)槿鄙倭艘痪?code>response.end(),http協(xié)議實(shí)際還未結(jié)束
增加response.end
var http = require('http');
// http 創(chuàng)建一個(gè)服務(wù)
// request - 瀏覽器向服務(wù)器請求發(fā)出的對象
// response - 服務(wù)器向?yàn)g覽器寫回的對象
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
console.log('訪問');
// write 輸出但http協(xié)議未執(zhí)行完畢
response.write('hello,world');
response.end('hell,世界');//不寫則沒有http協(xié)議尾,但寫了會產(chǎn)生兩次訪問
}).listen(8000);
console.log('Server running at http://127.0.0.1:8000/');
response.end中也可以輸入
然后從控制臺中可以看到奏候,輸入了兩次"訪問"
這是因?yàn)闉g覽器會再次訪問 favicon 這個(gè)資源
清除二次訪問
var http = require('http');
// http 創(chuàng)建一個(gè)服務(wù)
// request - 瀏覽器向服務(wù)器請求發(fā)出的對象
// response - 服務(wù)器向?yàn)g覽器寫回的對象
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
if(request.url!=="/favicon.ico"){ //清除第2此訪問
console.log('訪問');
// write 輸出但http協(xié)議未執(zhí)行完畢
response.write('hello,world');
response.end('hell,世界');//不寫則沒有http協(xié)議尾,但寫了會產(chǎn)生兩次訪問
}
}).listen(8000);
console.log('Server running at http://127.0.0.1:8000/');