GIAO DUC VA ĐAO TAO
TR NG Đ I H C KHOA H CƯỜ
KHOA CÔNG NGH THÔNG TIN

I TI U LU N
N : L P TRÌNH M NG
Đ i : m hi u v node.js
Giáo viên h ng d nướ : Nguy n Quang H ng ư
Sinh viên th c hi n : Nguy n Quang Hà
I. Gi i thi u. .............................................................................................................................. 3
1. L p trình không đ ng b .................................................................................................. 3
2. B n ph i làm t t c .......................................................................................................... 3
3. Module ............................................................................................................................... 5
4. Global Scope ...................................................................................................................... 6
5. C ng đ ng ......................................................................................................................... 6
II. Installation ............................................................................................................................. 6
1. Installing Node.js . ............................................................................................................. 6
2. Installing New Modules ..................................................................................................... 7
III. Các objects c b n.ơ ............................................................................................................. 7
1. Global Objects (đ i t ng toàn c c). ượ ............................................................................... 7
2. S ki n (Event). .............................................................................................................. 15
a. EventEmitter .................................................................................................................... 15
b. K th a t EventEmitter ( Inheriting From EventEmitter ).ế .......................................... 16
c. Lo i b các s ki n l ng nghe (Removing Event Listeners). ........................................ 17
3. Lu ng ( Streams ). ........................................................................................................... 17
a. Readable Streams ............................................................................................................. 17
b. Writable Stream. .............................................................................................................. 20
4. File System ....................................................................................................................... 20
5. HTTP. ............................................................................................................................... 23
6. Đ c thêm Nodejs Docs. .................................................................................................. 29
IV. Các ng d ng đ c xây d ng trên n n Node.js. ượ ............................................................. 29
1. ng d ng đ u tiên. ......................................................................................................... 29
2. HTTP Server. ................................................................................................................... 29
3. X lý các tham s URL ................................................................................................... 31
4. Đ c và vi t file ế ................................................................................................................ 32
5. Nodejs v i mysql ............................................................................................................. 33
V. WebSocket v i Node.js và Socket.IO ................................................................................ 34
1. Tìm hi u v Socket.IO .................................................................................................... 35
2. ng d ng tính k t qu bi u th c cho tr c. ế ướ ................................................................ 35
S d ng ch ng trình notepad ho c công c so n th o l p trình nào đó đ t o 2 file ươ
sau. ....................................................................................................................................... 35
Server.js: .............................................................................................................................. 35
Client.html: .......................................................................................................................... 36
3. ng d ng webchat. ......................................................................................................... 38
TÌM HI U V NODE.JS
I. Gi i thi u.
Node.js là m t h th ng ph n m m đ c thi t k đ vi t các ng d ng internet cóượ ế ế ế
kh năng m r ng, đ c bi t là máy ch web. Ch ng trình đ c vi t b ngươ ượ ế JavaScript, s
d ng k th t đi u kh n theo s ki n, nh p/xu t không đ ng b đ t i ti u t ng chi
phí và t i đ i kh năng m r ng. Node.js bao g m V8 JavaScript engine c a
Google, libUV, và vài th vi n khác.ư
Node.js đ c t o b i Ryan Dahl t năm 2009, và phát tri n d i s b o tr c aượ ướ Joyent.
M c tiêu ban đ u c a Dahl là làm cho trang web có kh năng push nh trong m t sư
ng d ng web nh ư Gmail. Sau khi th v i vài ngôn ng Dahl ch n Javascript vì m t API
Nh p/Xu t không đ y đ . Đi u này cho phép anh có th đ nh nghĩa m t quy c ướ
Nh p/Xu t đi u khi n theo s ki n, non-blocking.
Vài môi tr ng t ng t đ c vi t trong các ngôn ng khác bao g mườ ươ ượ ế Twisted
cho Python, Perl Object Environment cho Perl, libevent cho C và EventMachine cho Ruby.
Khác v i h u h t các ch ng trình Javascript, Nodejs không ch y trên m t trình duy t mà ế ươ
ch y trên Server. Node.js s d ng nhi u chi ti t k thu t c a ế CommonJS. Nó cung c p
m t môi tr ng REPL ườ cho ki m th t ng tác. ươ
Node.js đ cượ InfoWorld bình ch n là “Công ngh c a năm” năm 2012.
Đ b t đ u dùng Node.js, b n ph i hi u s khác nhau gi a Node.js v i các môi tr ng ườ
truy n th ng ch y trên server (server side) ph bi n nh PHP, Python, Ruby, etc ế ư
1. L p trình không đ ng b
Là l i th n u b n đã quen thu c v i các ph ng pháp l p trình không đ ng b . T t c ế ế ươ
các hàm trong Node.js là không đ ng b . Do đó, t t c ch y nh các block thread thông ư
th ng thay vì ch y n n. Đây là đi u quan tr ng nh t đ nh v Node.js. Ví d , n u b nườ ế
đang đ c m t t p tin trên h th ng t p tin, b n ph i ch đ nh m t ch c năng g i l i đó là
th c hi n khi đã hoàn thành các ho t đ ng đ c.
2. B n ph i làm t t c
Node.js ch là môi tr ng – đi u đó có nghĩa là b n ph i t làm t t c . Đó không ph i ườ
là m t server http ng m đ nh ho c là b t c server nào khác. Đi u này có th là h i khó ơ
hi u v i ng i ườ m i, nh ng thành công th c s c a nó là đ a l i m t hi u năng đáng kinh ư ư
ng c . M t scrits có th đi u ph i m i k t n i v i các client. Đi u này ế làm s d ng ít tài
nguyên đ a đ n m t hi u qu r t cao. Ví d sau v m t ng d ng Node.jsư ế
var i, a, b, c, max;
max = 1000000000;
var d = Date.now();
for (i = 0; i < max; i++) {
a = 1234 + 5678 + i;
b = 1234 * 5678 + i;
c = 1234 / 2 + i;
}
console.log(Date.now() - d);
Và đây là t ng đ ng v i mã PHP:ươ ươ
$a = null;
$b = null;
$c = null;
$i = null;
$max = 1000000000;
$start = microtime(true);
for ($i = 0; $i < $max; $i++) {
$a = 1234 + 5678 + $i;
$b = 1234 * 5678 + $i;
$c = 1234 / 2 + $i;
}
var_dump(microtime(true) - $start);
Và gi ta xem ch m đi m benchmark cho hai đo n code trên khi ch y trên hai môi
tr ng khác nhau:ườ
Number of iterations Node.js PHP
100 2.00 0.14
10’000 3.00 10.53
1’000’000 15.00 1119.24
10’000’000 143.00 10621.46
1’000’000’000 11118.00 1036272.19
Tôi th c hi n ch y hai đo n code trên t command line (console command) nên không
tr thao tác th c thi. Tôi ch y t ng th nghi m 10 l n l y k t qu trung bình. PHP ế
nhanh h n trong các l n ch y v i s l ng nh vòng l p. Nh ng v n đ thay đ i khi sơ ượ ư
l ng vòng l p tăng lên, s l n x tăng lên thì PHP ch y ch m h n r t nhi u trong khiượ ơ
Node.js có t c đ đáng kinh ng c. Sau t t c thao tác, PHP ch m h n 93% so v i Node.js. ơ
3. Module
Node.js s d ng m t ki n ế trúc mô-đun đ đ n gi n hóa vi c t o ra các ng d ng ph c ơ
t p. Mô-đun gi ng nh các th vi n trong C, ho c các đ n v trong Pascal. M i module có ư ư ơ
ch a m t t p h p các ch c năng liên quan đ n i t ng" c a các mô-đun. d , các ế ượ
mô-đun http ch a các ch c năng c th cho HTTP. Node.js cung c p m t vài mô-đun c ơ
b n đ giúp b n truy c p các t p tin trên h th ng t p tin, t o ra trình đi u khi n server
HTTP và TCP / UDP và th c hi n các ch c năng h u ích khác.
Đ g i m t modul th t d dàng, ch c n g i hàm require() nh sau ư
Var http = require(‘http’);
Hàm require() tr v tham chi u đ n các module quy đ nh. Trong tr ng h p c a ế ế ườ
này, m t tham chi u đ n các module http đ c l u tr trong bi n http. Trong đo n code ế ế ượ ư ế
trên, ta đã truy n tên c a module vào trong hàm require(). Vi c này ch đ nh cho Node.js
tìm trong th m c node_modules module t ng ng đ th c hi n.ư ươ N u Node không th yế
module t ng ng trong th m c thì s tìm trên global module cache. B n cũng thươ ư
ch đ nh m t module qua m t file v t lý qua đ ng d n t ng đ i hay tuy t đ i nh sau: ườ ươ ư
var myModule = require('./myModule.js');
Module đ c đóng gói t ng ph n mã. Đo n n m trong m t mô-đun ch y u ượ ế
private - có nghĩa là các ch c năng và bi n đ c đ nh nghĩa trong h ch có th truy c p t ế ượ
bên trong c a các mô-đun. Tuy nhiên, b n th ti p xúc v i ch c năng / ho c các ế
bi n đ c s d ng t bên ngoài c a mô-đun. Đ làm nh v y, ph i s d ng các đ iế ượ ư
t ng export v i các thu c tính ph ng th c c a v i t ng ph n b n mu nượ ươ
g i t bên ngoài. Hãy xem xét các modul ví d sau đây:
var PI = Math.PI;
exports.area = function (r) {
return PI * r * r;
};
exports.circumference = function (r) {