
BÔ GIAO DUC VA ĐAO TAO
TR NG Đ I H C KHOA H CƯỜ Ạ Ọ Ọ
KHOA CÔNG NGH THÔNG TINỆ
BÀI TI U LU NỂ Ậ
MÔN : L P TRÌNH M NGẬ Ạ
Đ Tài :ề Tì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 cóồ 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ự ệ ạ ạ ừ
có tr thao tác th c thi. Tôi ch y t ng th nghi m 10 l n và 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 lý 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. Ví 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 mãả ề ế ế ị ườ ợ ủ
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ì nó s tìm trên global module cache. B n cũng có 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 mã n m trong m t mô-đun ch y u làượ ừ ầ ạ ằ ộ ủ ế
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 có th ti p xúc v i ch c năng và / 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 và ph ng th c c a nó v i t ng ph n mã mà 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) {

