Tải bản đầy đủ (.pdf) (146 trang)

Tìm hiểu node js và xây dựng trang web đọc nguồn tin

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (16.93 MB, 146 trang )

.

",

.

DO. GIAO DUC vA BAo TAO

...

.

TRUONG BAI HOC NGOAI NGU - TIN HOC TP.HCM
KHOA CONG NGH~ THONG TIN

,

.-.

~

..-..

KHOA LUAN
TOT NGHIEP



TIM HIEU NODE.JS

vA xA Y DuNG




TRANG WEB DOC
NGUON TIN


Giang vien htrOng din: ThS. Nguy~n PhtrO'e B,i
Sinh vien th'1c hi~n:
Binh Kim Quac Khai - MSSV: 09DHII031
Ngo Van Kim Khanh - MSSV: 09DHII025

TP HO cHi MINH - 2013


L01 CAM ON
Lai cam on d~u tien, chung toi xin phep dugc gui dSn quy th~y co trong khoa
Cong Ngh~ Thong Tin, cling nhu cac th~y co cua truang B;;ti hQc Ngo;;ti NguTin HQc da: truy~n d;;tt rftt nhi~u kiSn thuc va ky nang huu feh trong su6t qua
trinh hQc ~p, ren luy~n t;;titruang.
D?c bi~t, v6'i long kinh trQng va biSt on sau s~c, chung toi cling xin gui dSn
nguai th~y cua chung toi - Th~y Th~y Nguyen Phuac D;;ti lai cam on chan
thanh nh<1tvi da: hSt long t;;tOdi~u ki~n thu?n lai, d9ng vien chung toi hoan
thanh t6t nh<1tnghien cuu nay sao cho khoa hQc va mang tinh ung ~\lng cao.
Xin chan thanh cam on SlJgiup dO',d9ng vien va chi bao r<1tnhi~t tinh cua cac
anh chj va t<1tca cac b;;tn, nhilng nguai da: giup chung toi c6 du nghj llJc va y
chi de hoan thanh lu?n van nay.
M?c du da: c6 g~ng hSt suc, song ch~c ch~n lu?n van khong kh6i nhung thiSu
s6t. Chung toi rftt mong nh?n dugc SlJ thong cam va chi bao t?n tinh cua quy
Th~y Co va cac b;;tn.
Nh6m sinh vien thlJc hi~n
Dinh Kim Qu6c Khai va Ngo Van Kim Khanh



L{)]MODAu

Ly do chQn d~ tili
Cling v6i SlJ phat trien m~nh me clla cac website va ling d1)ng tren n~n tang
web, cac cong ngh~ m6i ngay cang phat trien de dap frng kip nhu c~u k€t n6i
Internet ngay cang tang cao clla con nguo'i.
G~n day, Node.js tra thanh mQt trong nhung cong ngh~ thuOng xuyen duqc
nh~c d€n va dang nh~n duqc nhi~u SlJ quan tam va h6 trq nhi~t tinh bai cac
cong ty 16n nhu Microsoft, RedHat, Amazon, .... Nam 2012, Node.js duqc t~p
chi Info World binh chQn 1a cong ngh~ Clla nam. Hi~n nay, tren cQng d6ng
m~ng, Node.js lien t1)c duqc d6ng g6p, b6 sung va phat trien bai hang 10~t l~p
trinh vien tv nguy~n. Tuy nhien, do Node.js v~n con non tn~, c6 nhi~u diem
khac bi~t so v6i cach l~p trinh truy~n th6ng, doi hoi mQt 1uqng ki€n thlic nhit
dinh ill cac l~p trinh vien, ph~n 16n nguai m6i b~t d~u c6 the g?P mQt s6 kh6
khan khi ti€p c~n v6i cong ngh~ nay.
Xuit phat ill cac 1y do tren, chung toi dff thlJc hi~n d~ tai "Tim hieu Node.js va
xay dlJng trang web dQc ngu6n tin"
Trong d~ tai nay, chung toi tim hieu v~ nhung ki€n thlic cO'ban c~n bi€t, cach
thlic ho~t dQng, cac diem c~n chu y Clla Node.js va xay dlJng mQt Framework
giup de dang ti€p c~n v6i cong ngh~ nay cho nhfrng ai v~n con quen thuQc v6i
cach l~p trinh, phat trien ling d1)ng web truy~n th6ng d6ng thai dlJa vao d6
phat trien mQt ling d1)ng web minh hQa nhfrng gi dff thlJc hi~n duqc.
NQi dung nghien

CtfU

Lu~n van duqc chia thanh 5 chuang v6i nQi dung C1)the nhu sau:
Chuang 1: Gi6i thi~u t6ng quan v~ Node.js: Gi6i thi~u khai quat v~ cong

ngh~ Node.js cling nhu khai ni~m, 1ich su phat trien, cac d?c diem, cac bu6c
d.n bi€t khi b~t d~u phat trien v6i Node.js nhu cai d?t, IDE, thu vi~n, tv xay
dlJng mQt Framework c6 ciu truc ho~t dQng dlJa tren mo hinh MVC.
Chuang 2: Gi6i thi~u v~ NoSQL va MongoDB: Gi6i thi~u cO' sa du li~u
NoSQL rna dien hinh nhit 1a MongoDB v6n dang duqc su d1)ng rQng rffi cho
Node.js.


ChU011g 3: Xay d\fng ung dl;lng minh hQa: Phan tich, thiet ke trng dl;lng dQC
ngu6n tin RSS tr\fc tuyen.
ChU011g 4: Trien khai tren di~n tmin dam may: Gi6'i thi~u cac bu6'c de t~lO,
trien khai m9t ung dl;lng tren dich V\l cua OpenShift.
Chu011g 5: T6ng ket

Y nghia ella ct~tiii

us Uti nghien

CUu vS Node.js va cac ung dl;lng th\fc tien trong phcit trien cac
phc1nmSm, dich Vl;lm:;mg, d6ng thai cung cAp cai nhin sa lugc vS xay d\fllg va
trien khai ung dl;lng su dl;lng nSn tang dam may, giup tang cuang hi~u qua,
nang cao chAt luqng, giam chi phi.


Ml}C Ll}C

aN

3


DAu

4

Lal cAM
Lal MO
~

xET CVA GIANG VIEN HUONG DAN

6

~

xET CVA GIANG VIEN pRAN BI$N

7

vA HiNH vB
1/ GIOI THI$u TONG QUAN vB NODE.JS

DANH sAcH cAc BANG BIEU

11

CHUaNG

14

1.1/ Khai ni~m Node.js


14

1.2/ Ljch su hinh thanh, m\lc tieu va SlJphat trien cua Node.js
1.2.1/ Ljch sir hinh thanh
1.2.2/ M\lc tieu:
1.2.3/ SlJ phat trien

14
14
16
17

1.3/ If u nhugc diem
1.3.1/ If u diem
1.3.2/ Nh ugc diem

23
23
25

1.4/ Cai d~t va sir d\lng Node.js
1.4.1/ Cai d~t
1.4.2/ Sir d\lng IDE h6 trg l~p trinh
1.4.3/ B6 sung thu vi~n nha Node package manager (NPM)

25
25
28
31


1.5/ L~p trinh v6i Node.js
1.5.1/ Phuong thuc l~p trinh
1.5.2/ Global Objects (d6i tugng toan C\lc)
1.5.3/ Cac thu vi~n h6 trg co s~n
1.5.4/ Cac thu vi~n h6 trg c~n cai d~t them

34
34
36
44
66

1.6/ Xay dlJng JAWN Framework
70
1.6.1/ Gi6i thi~u v~ Framework
70
1.6.2/ M6 hinh MYC
70
1.6.3/ C~u truccua JAWN (JAWN is Another Web-framework for
Node.js)
71
1.7/ K~t 1u~n

77


CHUONG 2/ CO SO DO' LIEU NOSQL

vA


MONGODB

2.1/ Khai ni~m
2.1.1/ NoSQL
2.1.2/ BigData
2.1.3/ CAP Theorem

78
78
78
80
82

2.2/ Ly do su dVng
84
2.2.1/ Kha nang rna r(>ng 1inh hO':lt
84
2.2.2/ Hi~u qua cua Big Data
84
2.2.3/ Giam SlJ hi~n di~n cua cac nha quan trj cO' sa dfr li~u (DBAs Database Administrators)
85
2.2.4/ M6 hinh dfr 1i~u 1inh hO':lt
85
2.2.5/ Hi~u qua v€ kinh t~
85
2.3/ MongoDB
2.3.1/ Giai thi~u
2.3.2/ Nhfrng diSm n6i b~t cua MongoDB
2.3.3/ C~u truc dfr li~u

2.3.4/ Cai d~t va su dVng

86
86
86
87
88

2 .4/ K~t 1u~n

94

CHUONG 3/

xAY

Dl]NG UNG DUNG MINH HQA

3.1/ T6ng quan ngu6n tin RSS
3.1.1/ Khai ni~m RSS
3.1.2/ C~u truc file RSS
3.1.3/ RSS va OPML
3.1.4/ BQc file RSS nha XSLT

95
95
95
95
96
97


3.2/ Trang web dQc ngu6n tin (Trang web ARESES)
3.2.1/ Thi~t k~ chuc nang
3.2.2/ Thi~t k~ xu 1y
3.2.3/ Thi~t k~ giao di~n

99
100
100
122

3.3/ Su
3.3.1/
3.3.2/
3.3.3/
3.3.4/

127
127
128
129
131

dVng tren di~n tho':li di d(>ng
Giai thi~u PhoneGap
Phien ban ph~n m€m cho Android
Thi~t k~ xu ly
Thi~t k~ giao di~n



3.41 Ket Iu~n

CHUONG 41 TRIEN KHAI mEN DIJ;:NTOA.NDAM MAy
4.1 IGi6'i thi~u

4.1.1/ Khai ni~m di~n toan dam may
4.1.21 Gi6'i thi~u OpenShift
4 .21 Tri~n khai Node.j 8 tren OpenShift

4.2.1/ T~o Web Application tren OpenShift
4.2.21 Quim Iy Web application tren OpenShift
4.31 Ket lu~n

CHUON G 51 TONG KET

133
134
134
134
135
136
136
139
142
143

5.11 Ket qua d~t dugc

143


5 .21 H~n che

143

5.31 Hu6'ng phat tri~n

144

PHl) Ll)C A: Thiet l~p m6i truang cho PhoneGap

145

PHl) Ll)C B: M(>t86 thu~t ngfr 8U d\lng trong lu~n van

147

Tai li~u tham khao

150


DANH sAcH cAc BANG BlED

vA HINH vi

Hinh 1-1 L~p trinh vien Ryan Lienhart DahL

15

Hinh 1-2 s6 luqng website, server trien khai c6ng ngh~ Node.js (Ngu6n:

W3Techs.com)
18
Hinh 1-3 Vi tri Clla Node,js so v6i cac nen tang Server khac (Ngu6n:
W3Techs.com)
18
Hinh 1-4 Bieu d6 the hi~n s6 l~n Commit tren Github CllaNode.js

19

Hinh 1-5 Brendan Eich, nguai sang t~o nen Javascript.

20

Hinh 1-6 Bieu tuqng Google Chrome va Javascript V8 Engine

21

Hinh 1-7 Node.js dva tren V8 Javascript Engine

23

Hinh 1-8 Giao di~n Node.js version 0.8.18 tren Ubuntu

27

Hinh 1-9 Cua s6 "Create a New Workspace" CllaC9.io

29

Hinh 1-10 Giao di~n lam vi~c clla C9.io


30

Hinh 1-11 Ph~n mem WebStorm IDE

30

Hinh 1-12 Blocking I/O

35

Hinh 1-13 Non-blocking I/O

35

Hinh 1-14 M6 hinh MVC

71

Hinh 2-1 Binh Ii CAP

82

Hinh 2-2 Bieu tuqng MongoDB

86

Hinh 3-1 Bieu tuqng RSS tren cac trang khi co ngu6n tin

95


Hinh 3-2 N<)idung RSS khi dugc chuyen b~ng XSLT

99

Hinh 3-3 Cac Use Case clla trang web ARESES

101

Hinh 3-4 Chuc nang dang ky

104


Hinh 3-5 Chuc nang dang nh~p

104

Hinh 3-6 Chuc nang dang xu~t

105

Hinh 3-7 Chuc nang chinh sua thong tin ca nhan

106

Hinh 3-8 Chuc nang xem tru6c ngu6n tin

106


Hinh 3-9 Chuc nang export cac tin tuc dff lUll

108

Hinh 3-10 Chuc nang xem cac tin tuc dff lUll

108

Hinh 3-11 Chuc nang huy d~u lUll tin tuc

109

Hinh 3-12 Chuc nang danh d~u luu tin tuc

109

Hinh 3-13 Chuc nang binh lu~n tin ruc

111

Hinh 3-14 Chuc nang export cac ngu6n tin ra OPML

III

Hinh 3-15 Chuc nang import cac ngu6n tin ill OPML

112

Hinh 3-16 Chuc nang xem danh sach ngu6n tin


112

Hinh 3-17 Chuc nang xoa ngu6n tin

113

Hinh 3-18 Chuc nang them ngu6n tin

113

Hinh 3-19 Chuc nang xem chi ti~t tin ruc

114

Hinh 3-20 Chuc nang xem danh sach cac tin

114

Hinh 3-21 Chuc nang t6ng hgp cac tin m6i nh~t..

115

Hinh 3-22 Chuc nang tlJ d9ng c~p nh~t tin m6i

115

Hinh 3-23 Chuc nang tv d9ng theo d5i cac ngu6n tin

116


Hinh 3-24 Tuang tac v6i server cung c~p ngu6n tin

117

Hinh 3-4 Giao di~n trang chu ARESES

122

kY thflnh vien

123

Hinh 3-5 Giao di~n dang

Hinh 3-6 Giao di~n dang nh~p

123


Hinh 3-7 Giao di~n c~p nh~t thong tin nguai dung

123

Hinh 3-8 Giao di~n nh~p lien klh xem truac ngu6n tin

124

Hinh 3-9 Giao di~n xem truac ngu6n tin

124


Hinh 3-10 Giao di~n khi ail theo d5i ngu6n tin

125

Hinh 3-11 Giao di~n nh~p lien k~t theo d5i ngu6n tin

125

Hinh 3-12 Giao di~n danh sach cac ngu6n tin dang theo d5i

126

Hinh 3-13 Giao di~n cac tin mai nh~t..

126

Hinh 3-14 Giao di~n binh lu~n tren cac ngu6n tin

126

Hinh 3-15 Xu~t cac tin mc dil luu

127

Hinh 3-16 Cac Use Case cua phien ban ARESES tren Android

129

Hinh 3-17 Giao di~n chfnh cua phien ban mobile


131

Hinh 3-18 Giao di~n dang nh~p

131

Hinh 3-19 Giao di~n dang ky

132

Hinh 3-20 Giao di~n xem truac ngu6n tin

132

Hinh 3-21 Giao di~n hi~n thj cac tin mc

132

Hinh 3-22 Giao di~n lQc, hi~n thj nQi dung ngu6n tin

133

Hinh 3-23 Giao di~n chinh sua thong tin nguai dung

133

Hinh 4-1 Cac djch V\l di~n toan dam may

135


Hinh 4-2 Giao di~n dang kY cua OpenShift

137

Hinh 4-3 Cach luu private key trong PuTTY gen

140

Hinh 4-4 Cach dang nh~p khi dung PuTTY

141

Hinh 4-5 Cach su d\lng Private key d~ ti~n hanh xac thllc

141

Hinh 4-6 Thong bao sau khi dang nh~p thanh cong

141


Chuang 1/ Giai thi?u t6ng quan v~ Nodejs

CHUONG 11GIm THI~U TONG QUAN

14

VE NODE.JS


1.11Khai ni~m Node.js
Node.js la nSn Umg giup cac nha phat tri~n ung dVng chi c~n dung ng6n ngfr
Javascript d~ l?p trinh cho ca phia client va phia side, thay vi phai su dVng
PHP, Ruby in Rails, Perl, ... nhu truac day d~ thlJc hi~n.
Node.js rna ra mQt ky nguyen mai vS l?p trinh web do
- Kha nang ch~y JavaScript tren mQt may ao V8 JavaScript Engine r~t nhanh,
t6c dQ
Iy dang kinh ng~c.

xu

- Kha nang quan Iy hang ngan SlJ ki~n d6ng thai va I?p trinh theo phong cach
mai, t?n dVng thai gian thlJc thi I/O d~ phvc vv tiep cac yeu c~u dang dgi
Iy (ngugc I~i vai Java, C# hay mQt s6 cac ng6n ngfr I?p trinh khac).

xu

- Giup mQt server co th~ gifr ca chvc ngan ket n6i song song cung Iuc, Ia kha
nang s6ng con cho nhfrng trang web c~n tinh nang xu Iy theo thai gian thlJc
hi~n nay - mQt xu huang thai d~i khi nhu c~u va t6c dQ Internet cang tang,
smartphone, tablet ra dai nhu vu bao.

1.2/ Lich sfr hinh thanh, ml}c tien va S,! phat tri~n cua Node.js
1.2.11Lich Slf hinh thanh
Joyent Ia t6 chuc qu6c te chuyen cung c~p ph~n mSm h~ th6ng, di~n toan dam
may va cac goi h6 trg ky thu?t cho cac t6 chuc, doanh nghi~p va nha phat
tri~n. NSn tang di~n toan dam may cua Joyent dugc cac c6ng ty tien tien tren
the giai ung dVng d~ tri~n khai dich vv tieu bi~u nhu m~ng xa hQi tuy~n dVng
LinkedIn, c6ng ty kinh doanh trlJc tuyen Gilt Groupe, c6ng ty phat tri~n game
tren m~ng xa hQi Kabam, ....



Chuang 1/ GiOi thi?u t6ng quan

vJ Nodejs

15

Hinh 1-1 L~p trinh vU!n Ryan Lienhart Dabl

Ryan Lienhart Dahlia mQt l~p trinh vien tt.rdo qu6c tich My, sinh ra va 100
len a Rochester, New York, hi~n dang sinh s6ng va lam vi~c cho cong ty
Joyent tc;liSan Francisco. Linh Vl,fCnghien cUu chinh cua Ryan la interruptible
parsers, event loops, response time histograms, phat trien nen tang web
servers vm mQt s6 d\f an ngu6n rna tieu bieu nhu Ebb web server va module
"EY" load balancer cho Nginx.
D\fa tren nhfrng kinh nghi~m tich lfiy ill qua trinh lam vi~c, Ryan da cho ra
dOi nen tang Node.js ill nam 2009, phat trien dum S\f bao trq cua t6 chuc
Joyent, cong ty da h~u thufrn cho vi~c phat trien Node.js thong qua nhieu hinh
thuc nhu dAutu tai chinh, h6 trq hc;ltAngkYthu~t va nhan l\fc phat tri8n.
Nam 2012, Node.js duqc tc;lPchi InfoWorld binh chQn la cong ngh~ cua nam.
Hi~n nay, tren cQng d6ng mc;lllg,Node.js lien !\Ic duqc dong gop, b6 sung va
phat tri8n bffi hang lOc;ltl~p trinh vien t\f nguy~n.
GAn day, Node.js tra thanh mQt trong nhfrng cong ngh~ thuOng xuyen duqc
nh~c d~n va dang nh~n duqc nhieu S\f quan tam va h6 trq nhi~t tinh bffi cac
cong ty 100 nhu Microsoft, RedHat, Amazon, ....

Cho d~n nay, Node.js duqc phat trien d\fa tren gifry phep MIT License, v6n la
mQt gifry phep phAn mem tt.r do duqc phat hanh bffi HQc vi~n Cong ngh~
Massachusetts, duqc hQi d6ng MIT X sir d\lng. Gifryphep nay duqc sOc;lll

thao
cho X Window System (d\f an tc;logiao di~n d6 hQa cho nguai dimg a cac may
tinh k~t n6i mc;lllgvao nam 1984). Trong do, cac quyen lqi troy c~p rna ngu6n


Chuang 1/ Giai thi?u t6ng quan v€ Nodejs

16

clla nguai su dVng gi~y phep vftn wang t\TOOucac gi~y phep ngu6n rna khac.
Ngoai ra co rnQt s6 di~rn khac sau:
Kh6ng b~t bUQcphai c6ng khai rna ngu6n.
Co th~ duqc chinh sua l;;ticho phu hqp v6'i th\Tc t~.
Kh6ng c~rn su dVng ten Clla nguai gift ban quy~n vao rnvc dich
quang ba san ph~rn, thuO'ng hi~u.
Kh6ng b~t bUQc phai hi~n daOO sach t~t ca nhftng nguai rung
tharn gia th\Tc hi~n d\Tan trong thaOOph~n phat tri~n Clla chuang trinh.
Lo;;ti b6 thuQc tiOO copyleft kh6i gi~y phep (copyleft rn6 ta cach
su dVng lu~t bfm quy~n d~ lo;;tib6 t~t ca cac h;;tn ch~ v~ phan ph6i ban sao va
cac phien ban tac ph~rn da duqc chinh sua cho rn9i nguai va yeu c~u phai bao
luu quy~n tV'do nhu v~y trong cac phien ban chiOOsua).
D~ cung c~p du6'i MIT License, rna ngu6n phai kern theo nQi
dung ghi chu ban quy~n Clla MIT.



Do quy~n lqi clla nguai su dVng duqc uu tien, gi~y phep nay tra nen ph6 bi~n
trong cQng d6ng rna ngu6n rna. Nha do, b~t ky ai cling co the tharn gia cQng
d6ng phat tri~n cho Node.js t;;titrang web />Gic1y phep nay la di~u ki~n thuc d~y t6c dQ phat trien Clla Node.js va gi~y
phep duqc su dVng nhi~u cho cac project h6 trq Node.js hi~n nay.


1.2.2/ Ml}c tieu:
Tru6'c do, Dahl thuang xuyen vi~t cac project d\Ta tren ng6n ngft C va thuang
lien quan d~n server va event-driven. D~n d~n anh nh~n ra anh thuang xuyen
phai vi~t l~p di l~p l;;ti cung rnQt nQi dung code cho cac project khac nhau.
Anh nh~n ra dftu C vftn la ng6n ngft yeu thich, anh vftn c~n rnQt ng6n ngft phu
hqp han de l~p trinh server.


Chuang 1/ Gi6'i thi?u t6ng quan

vd Nodejs

17

M\lc tieu ban d~u Clla Dahlia lam cho trang web co kha nang push nhu trong
mQt s6 ung d\lng web nhu Gmail. Sau khi thu nghi~m vai moi truemg duqc
vi~t trong cac ngon ngfr khac nhu Twisted cho Python, Perl Object
Environment cho Perl, libevent cho C va EventMachine cho Ruby, Dahl di
d~n quy~t dinh chQn ngon ngfr Javascript va su d\lng V8 Engine duqc Google
tung ra cach hIe do khong lau. Nguyen nhan vi ngon ngfr Javascript chua
duqc dinh nghia API Nh?p/Xu~t va V8 Engine su d\lng ngon ngfr C rna anh
quen thuQc. Tir do, anh co the dinh nghia mQt quy uac Nh?p/Xu~t mai theo
huang SlJ ki~n va non-blocking. Ngoai ra, theo anh, Javascript d~ dang han d~
l?p trinh server, ch~ng hC;lnnhu khi vi~t IRC Server.
Tuy nhien, do Node.js vftn can non tre, co nhi€u di~m khac bi~t so vai cach
l?p trinh truy€n th6ng, doi hoi mQt luqng ki~n thuc nh~t dinh ill cac l?p trinh
vien, ph~n Ian nguai mai b~t d~u co th~ g~p mQt s6 kho khan khi ti~p c?n vai
cong ngh~ nay.


1.2.3/

S., phat tri~n

1.2.3.11Nhu c~u sfr dl}.ng
Tir khi phat tri~n d~n nay, theo bao
cung c~p th6ng ke, bao cao, va x~p
tri~n khai cong ngh~ Node.js ngay
0.017% (thang 3/2013). Di€u nay
Node.js trong tuang lai.

cao Clla W3Techs.com, mQt trang chuyen
hC;lngwebsite thi s6 luqng website, server
cang tang, tir 0.006% (thang 3/2012) len
cho th~y ti€m nang phat tri~n cao clla


Chuang 1/ Gim thi?u tJng quan

vJ Nodejs

19

Dich V\l dang Uli tai li~u issuu.com: MQt dich V\l giup dang tai va chia se tai
li~u di~n ti'r ttvc tuy~n nhu sach, bao, t~p chi, tich hgp v&i rn~g xa hQi de
quang ba tai li~u. Trang web hi~n co 52 tri~u dQc gia vm 210000 nQi dung
duQ'cdang tciihang thang va x~p h~g 614 (theo Alexa thang 2/2013)
Th6ng ke rn~ng xa hQi Klout.com: Trang web cung cc1pdjch V\l th6ng ke
rn~ng xa hQi theo thm gian thgc cua ngum dUng (Twitter, Facebook,
Google+) va co han 2000 d6i tac sau chi 1 nam thanh I~p. Trang web xu Iy

gc1n 1 tY 1c1ngQi API rn6i ngay va hi~n x~p h~g 1793 (theo Alexa thang
2/2013)
Quc~mIy project Trello.com: H6 trQ'theo d5i, quan ly cac cong vi~c nhorn hi~u
qua bfulg rnQt giao di~n dan gian. Trang web hi~n co han 1 tri~u user rn6i
ngay va x~p h~g 3456 (theo Alexa thang 2/2013)
1.2.3.2/ T6c

dq c~p nh~t va phat tri~n

February 15th 2009 March 3rd 2013
Commrts 10 master

excluding merge comml1S

ConlnOulon Type Commits

Hinh 1-4 Bi~u dA th~ hi~n sA IAn Commit tren Github cua Node.js

Nha gic1yphep ngu6n rna, thong thming trong cac dieu khoan rang bUQc,
Node.js luon duQ'c cQng d6ng rn~g phat trien va sua 16i hang thang. Theo
Github, hi~n nay Node.js duQ'cphat trien thanh 3395 nhanh phat trien (tinh
d~n ngay 15/3) de c~p nh~t, b6 sung vao rna ngu6n chinh.
1.2.3.3/ Cong ngh~ h8 trC}'Node.js
Chi trong thai gian ngiin tir nam 2009 d~n nay, Node.js da thu hut sg chu y
cua hang ngan I~p trinh vien, phat trien h~ th6ng quan Iy thu vi~n NPM va thu
hut ca.cac cong ty rn6'i khai nghi~p. Nguyen nhan nfun a cac cong ngh~ h6 trQ'
Node.js, giup gicii quy~t cac nhan t6 quan trQng nhu kha nang xu Iy, thai gian


Chuong 1/ GiOi thi?u t6ng quan


vJ Node.js

20

va cac vc1nd~ th\l'c t~ rna truac day thuang kho giai quy~t khi su d\lIlg vm cac
web server khac.
Ngon ngft I,p trinh Javascript va cuqc chi~n gifta cac trinh duy~t

Minb 1-5 Brendan Eicb, ngtriri sang tlJOnen Javascript

Javascript duQ'c Brendan Eich sang t~o t~i Netscape van nam 1995 va ch~y
tren phien ban Netscape 2 duQ'ctung ra van nam 1996. Trong giai do~ phat
tri~n, Javascript co ten la Mocha, khi tung ra phien ban beta co ten la
LiveScript, cu6i cung, vi m\lc dich ti~p thj, ten Javascript duQ'c chQn d~ ph6
bi~n cho mQi nguOi. Them van do, mQt s6 ten khac nhu ECMAScript, Jscript
cling duQ'c dung d~ gQi ngon ngu nay. Vai nhi~u ten gQi, d~c bi~t vm ten
Javascript vai ti~n t6 Java da khi~n khong it nguOi nhfun Iftnvm ngon ngu l~p
trinh Java cua Sun Microsystem, hi~n da thuQc v~ cong ty Oracle.
Sau khi Netscape 2 tung ra, Microsoft phat tri~n kha nang xu ly Javascript
tren trinh duy~t internet Explorer 3 vai ten JScript . Khi xu huang duy~t web
bung n6, Javascript duQ'c cai d~t va su d\lIlg tren hang lo~t trinh duy~t khac
nhau. Ngon ngu nay dftn tra nen m~ me han, la mQt ngon ngu quan trQng
trong xu ly tuang tac vai nguOi dung, nhelt la trong vi~c xu ly Ajax - mQt
cong ngh~ c~p nh~t nQi dung trang web rna khong cftn n~p l~i trang. Thely
duQ'c di~u mlY, cac nha san xuelt trinh duy~t lien t1)c tung ra cac phien ban
mai, trong do t~p trung m~ a engine xu ly javascript nhu Webkit(Safari),
V8(Google Chrome), Chakra(IE), .... Vi~c t~p trung nay gop phftn giup ngon
ngft Javascript phat tri~n nhanh chong, hang lo~t cac cong C\lh6 trQ'l~p trinh
Javascript phat tri~n.



Chuang J/ Gim thi?u tt5ngquan

vJ Nodejs

21

s6 lUQ11gl~p trinh vien bi€t ngon ngfr tang cao do Javascript duQ'c dua vao
giang khong chi cho cac khoa hQc l~p trinh vien rna cho ca cac khoa hQc thi€t
k€. Hi~n nay, Javascript duQ'c hang lo~t cac trang web, n6i b~t la
codecademy.com khuy€n khich la ngon ngft dAutien danh cho nguOi mai bilt
dAul~p trinh.
Th€ nen, wac day, Javascript thuOng duQ'cnghi ngay nhu mQt ngon ngft bi
giai h~ ben trong trinh duy~t va xu ly a phia client. Tuy nhien, vi~c su d\lllg
ngon ngft l~p trinh khac gifta phia server va client vfuJ.bQc lQ nhuQ'c di~m
trong khau phat tri~n, duy tri va rna rQng.
Nay, nha S1)' h6 trQ'm~nh me cua cQng d6ng m~g, Javascript co th~ duQ'c Slr
d\IDg d~ l~p trinh cho pilla server. Vi~c su d\lllg Javascript lam server giup
nguOi l~p trinh t~ d\IDgduQ'cnhUng th€ m~ ella Javascript nhu ham duQ'c
lUll tm va gan nhu Object, k€ thira theo phuong phap prototypal inheritance,
don gian so vai class truy~n th6ng, khong rang bUQcki~u dft li~u Cllabi€n, la
ngu6n cam hUng cho S1)' ra dOi CllaJSON.
V8 JavaScript Engine
chilc hful hAuh€t mQi nguai d~u timg su d\IDghon mQt trinh duy~t tren may
tinh. Khi do, n€u la nguOi dimg thuOng xuyen CllaGoogle, nguai ta khong th~
khong nghe noi d€n trinh duy~t Google Chrome.

chrome
Hinb 1-6 Bi~u tuvng Google Cbrome va Javascript


V8 Engine

Google Chrome la mQt trinh duy~t duQ'c cong ty Google dAu tITkha nhi~u,
trong do g6m nhi~u thanh phfrn hQ'Pl~i, IDQttrong nhUng thanh phfrn kha quan
trQng giup ~o nen Google Chrome chinh la Google V8 JavaScript Engine
cung cfrp nhan xu ly Javascript qUaIl trQng giup nguOi dimg co cam giac
nhanh hon hful so vai cac trinh duy~t khac.
Vi sao Google t~o them V8 JavaScript Engine trong khi dff co nhi~u engine
xu ly Javascript khac tren thi wOng?


Chuang 1/ GiIJi thi?u t6ng quan v~ Nodejs

22

V6'i cong ty mly, hQ da va dang phat triSn m~nh cac dich V\l duqc r~t nhieu
nguai yeu chuQng, do la GMail, Google Docs (Google Drive), Google
Maps, .... Cac dich V\l nay khong con dan thu~n xu Iy tren phia client nfra, hQ
c~n xu ly lien Wc mQt luqng 16'n cac request dlJa tren cong ngh~ AJAX v6n
dlJa tren Javascript. Google cung rQng rai h6 trq phat triSn AJAX v6'i bQ cong
C\l Google Web Toolkit cua hQ, co thS giup Java applicatio~ h6 tra AJAX.
The nen, cung khong co gi I~ khi hQ quyet tam t~o nen engine m6'i dS tang t6c
xu Iy Javascript han nfra. V8 JavaScript engine duqc t~o ra va da qua m~t cac
d6i thu JScript
(Internet
Explorer),
SpiderMonkey
(Firefox),
va

JavaScriptCore (Safari). Neu frng d\lng web c~n t6c dQ xu ly Javascript
nhanh, V8 JavaScript engine la SlJ llJa chQn thich hqp. SlJ tang t6c nay ph\l
thuQc vao s6 luqng code va khci nang cua Javascript dS thlJc thi. Neu mQt ham
thuerng xuyen duqc gQi l~i, t6c dQ se tang len dang kS so v6'i vi~c gQi hang
lo~t ham khac nhau. Nguyen nhan la 0 cach thiet ke cua V8 JavaScript
engme.
Nhan xu ly V8 JavaScript engine dugc viet b~ng ngon ngfr C++, cung c~p
cach tiep c~n hoan toan khac so v6'i cac phuang thuc xu ly tru6'c day. Ngay
khau thiet ke va phat triSn, Google da t~p trung vao cac thanh ph~n quan
trQng chinh sau:

tu

Sinh ra rna may: V8 JavaScript engine se t¥ dQng sinh ra rna may tru6'c khi
thlJc thi trong cac cach tiep c~n tru6'c day la thlJc thi byte code ho~c phi en
dich (interprete) code, h6 trq tai su d\lng, thlJc thi nhanh va hi~u quci han.
Trong qua trinh nay, trinh bien dich co thS t6i Uti cac code quan trQng c~n gQi
l~i nhieu l~n.
Truy c~p properties nhanh han: Javascript la ngon ngfr g~n lien v6'i object va
cac property, trong do property co thS them vao va xoa kh6i object b~t kY luc
nao. Cach tiep c~n tru6'c day thuang su d\lng ca che gi6ng nhu tu diSn, c~n
property nao, phcii tra I~i vi tri cua no tren bQ nh6'. V8 JavaScript engine duqc
thiet ke l~i, nha khci nang sinh ra rna may, cac bien duqc d~t t~i vi tri c6 dinh,
xac dinh boi trinh bien dich.
Phat triSn garbage collection: thay vi thuang xuyen tim va dQn bQ nh6' khi
object khong con lien ket, V8 JavaScript engine se t~m dung xu Iy code khi


Chuang J/ GiOi thi~u t6ng quan


vJ Nodejs

23

l~y l(;libQ nh6 cua cac object khong con lien ket den, quan 1:9" ch~t cac object
va pointer trong bQnh6, giam S\Iphan manh bQnh6 va hl;lllche memory leak.

Node.js

va JavaScript

Runtime

Hioh 1-7 Node.js dlpl treo V8 Javascript

Engine

Nha ket hQ'Pgifra Node.js Va V8 JavaScript engine, webserver co the th\ICthi
cac (mg d\lllg Javascript Ian mQt cach hi~u qua va t6c dQnhanh han.
1.3/ U u nhtrQ'c di~m
1.3.1/ Uu di~m
DtrQ'c h6 trQ' m~nh til' cqng dAng rna nguAn rna va cac cong ty IOn
V6i vi~c sir d\lllg gi~y phep MITIBSD, Node.js rna ra canh cira m6i va thu vi
cho cQng d6ng ml;lllgdong gop va phat trien. Nha do s6 luqng project cho
Node.js khong ngimg tang len ca v~ s6 luqng va ch~t luqng. Di~u nay khien
cho cac cong ty Ian cling dAu ill van node.js vm cac san phfun nhu Yahoo
Cocktail, Cloud9 IDE, Walmart, Ebay, ....
Sir dl}ng ngon ngii' Javascript ph8 bi~n, di hf}c, Iinh ho~t, uy~n chuy~n
Javascript dfi xu~t hi~n til r~t s6m tren trinh duy~t Netscape, va til do dAndAn
chiem IInh mang l~p trinh cho client tren trinh duy~t nha nhi~u Uti diem dfi

duqc gim l~p trinh cong nh~ rQng rfii..
H6 trQ' rn~nh chuin JSON (JavaScript
Object Notation)
JSON la chuck dinh dl;lllgdft li~u duqc l~y cam h(mg til c~u truc co tinh
dan gian va d€ hieu cua ngon ngft Javascript vi the duqc Node.js h6 trq
mQt cach t\I nhi~n va ml;lnhme, khien Node.js tra thanh mQt l\Ia chQn
tuy~t vai de phat trien cac (mg d\lllg truy~n tcii dft li~u qua m(;lngbfuIg
JSON.
Cong ngh~ AJAX va kh3 nang tai sir dl}ng I~i nqi dung code
Kha nang xu 1:9" nhi~u requests vm thai gian response th~p cung vm
vi~c dung l(;licung mQt dOl;lllcode Javascript, chfulg hl;lllnhu validation
tren ca server lfuI client giup vi~c phat trien rnQt Website chi v6i rnQt
trang tra nen d€ dang han bao gia het.


ChU017g 1/ Gi6'i thi?u t6ng quan

vJ Node.js

Mo hlnh l~p trlnh mrri, sfr d\fng cach l~p trlnh non-blocking

24

I/O

Khac v6i l?p trinh m;;1ngtrong Java, Node.js cho phep ti~n trinh ti~p tlfc
xu ly tac Y\l khac sau khi request mQt tac Y\l dQc/ghi len bQ nh6 ngoai
hay truy€n dfr li~u qua m;;1ngrna khong phai block thread hay process.
Cac tac Y\l 10 do sau khi thgc thi xong se gQi mQt ham callback da:
dugc gan tru6c do de thong bao hoan t~t va thgc thi nhfrng xu ly dga

tren dfr li~u theo yeu celu.
T8c oQ xu ly nhanh (nhO' V8 engine)
V8 la JavaScript Engine cua trinh duy~t Google Chrome. Khi V8 ra dai, no da:
t;;1ora cUQc cach m~mg cho cac trinh duy~t, boi vi t6c dQ cua no nhanh hon
dang ke t6c dQ cua JavaScript engine cua Firefox, Safari v.v ....
Theo trinh bay cua Ryan Dahl tren nodejs.org, khi co 100 k~t n6i d6ng
thai va server celn tra v€ nQi dung 1 MB dfr li~u:
Node.js co the xu Iy 822 yeu celu / giay
nginx co the xu Iy 708 yeu celu / giay
thin co the xu Iy 85 yeu celu / giay
mongrel co the xu Iy 4 yeu celu / giay
Nhi~u thtr vi~n, d~ cai o~t (nho- npm)
npm la mQt chuong trinh quan Iy packages (libraries) thgc thi tren Linux qua
command line (Linux shell), giup quan Iy, cai d~t va publish thu vi~n. MQi
thu vi~n cua Node.js d€u dugc dang kY t?i va day la nai de
npm tai xu6ng va b5 sung thu vi~n cho nguai I?p trinh khi celn.

Xay dlfng h~ th8ng vm o~c tinh scalable cao
Ngay tu ten cua Nodejs da: noi len di€u nay, ill node nghia la ffiQt nut trong
m?ng cac server lien k~t v6i nhau. Node.js d~c bi~t chu trQng d~n phan tan
cac server de xu Iy nhu celu request cao cua Internet nhu hi~n nay. V6i cach
phan tan nhu V?y, vi~c g~n them hay bat di server se d~ hon r~t nhi€u, d6ng
thai bao dam dugc uptime cao cua toan bQ h~ th6ng.


Chuang 1/ Gi6'i thi?u t6ng quan

vd Nodejs

25


1.3.2/ Nh U'Q'cdi~rn
Phai t1}'xay d\fng rnQi thrr

Node.js hi~n chi cung cAp n~n tang, th~ nen, nguai l~p trinh phai tv cai d~t
m9i thu d~ co th~ t?O nen ung d\lng web mong mu6n, ch~ng h?n, d~ t?O mQt
HTTP Server, nguai l~p trinh bUQcphai hi~u cach thuc tuong tac gifra Web
Browser va Server d~ cai d~t cac ham xu ly phil hqp. Tuy nhien, v6i SlJh6 trq
tir cQng d6ng m?ng, l~p trinh vien co th~ tim thAyrAtnhi~u huang din va thu
vi~n xu ly cac chuc nang cc1nthi~t.
Kern hi~u qua khi ch~y cac rrng d1}ng doi hoi tfin su~t

xu ly cao

Node.js khong phil hqp cho cac tinh hu6ng xu ly ng6n nhi~u CPU nhu tri tu~
nhan t?O, encode/decode video, cryptography, ... Th~ nhung Node.js h6 trq
vi~t cac addons b~ng ngon ngfr C/C++, vi th~ cac tac V\l xu ly n~ng co th~
duqc implement b~ng C/C++, sau do build ra thanh mQt addon cua Node.js d~
ho?t dQnghi~u qua hon.
Ben c?nh do co th~ su d\lng Node.js k~t hqp g9i mQt process khac d~ xu ly
cac tac V\l n~ng, k~t qua xu ly xong se duqc tra v~ cho Node.js qua ham
callback, dam bao xu ly thong su6t.
Con

non

tre

so


v6'i cac n~n tang phat
tri~n server
khac.
Node.js ra dai tir nam 2009, cho d~n nay dii la 3 nam, v6i mQtcQng d6ng phat

tri~n ClJCky nang dQng nhung vin kho co th~ tranh khoi hi~n thlJc non tre,
thi~u trai nghi~m so v6i cac n~n tang dan anh khac nhu PHP (1994), Python
(1980), Perl (1987), ... Vi~c trng d\lng vao kinh doanh, thuong m?i va cac ung
d\lng doi hoi dQtin c~y cao cua Node.js vin con h?n ch~ do tinh 6n dinh chua
duqc ki~m chung cua no. Tuy v~y, vin khong ngan duqc suc hut cua Node.js
d6i v6i cac cong ty Ian.
1.4/ Cai d~t va

su d1}ng Node.js

1.4.11 Cai d~t

Version hi~n su d\lng:
- Node.js version 0.8.18
- Npm version 1.1.71


Chuong 1/ GiOi thi?u t6ng quan v~ Nodejs

26

Build va cai d~t tren cac h~ di€u hanh Linux:
cd~
git clone />cd node
git checkout vO.8.18 #ChQn phien ban mai nhAtva tai v€ bAnggit

#tir trang web />.Iconfigure
make
sudo make install

H~ di€u hanh Ubuntu Linux (cai d~t bAngphien ban binary - build sAn):
cd~
sudo
echo
echo
sudo
sudo
echo
echo

apt-get update
"Y" I sudo apt-get
"Y" I sudo apt-get
add-apt-repository
apt-get update
"Y" I sudo apt-get
"Y" I sudo apt-get

install git-core curl build-essential openssllibssl-dev
install python-software-properties
ppa:chris-Iea/node.js
install git
install nodejs npm

Cai d~t va sir d\lIlg Node.js tren h~ di€u hanh Windows, cfrn tai file cai d~t
d~g .msi tt;li: />Giao di~n sao khi cai (fit xong:



Chuang 1/ GiOi thi?u t6ng quan

vJ NodeJs

27

Hinh 1-8 Giao di~n Node.js version 0.8.18 tren Ubuntu.

MQt

Sa I~nh co"ban san khi cai dit:

Khi oo?P l~nh node tren cua s6 dong I~OOkhong kern s6, Node.js se vim ch€
dQRead-Eval-Print-Loop.
Trong ch€ dQ Dxong, Node.js se th\fc thi va hi~n k€t qua, qua triOOnay lien tl)Cl~p l~i den khi
ngum dUng thoat.
.break Khi dang so~ thao, n€u khong thfiy cac dfiu dong ngo~c cfuI thi€t,
Node.js se chuy~n ch€ dQOOi€udong. Twang hqp rnu6n thoat, nh?P I~OOnay
tren bfit 10' dong nao .
.clear Sau khi chiOOsua trong Node.js, gQi I~OOnay n€u cfuIreset v€ ban dAu.
.exit Thoat Node.js
.help Hi~n daOOsach tfit ca cac I~OOh6 trQ"
.save LUlltfit ca cac I~OOda nh?p van file
.load Th\fc thi file da viet s~n


ChU011g1/ Giiri thi?u t6ng quan


vJ Nodejs

28

Ngoai ra, co th~ nhelncac t6 hgp phim sau:
<etrl> + C Tuang tv nh~p .break. Nheln 2 lftn d~ thoat.
<etrl> + D Tuang tv nh~p .exit.
1.4.2/ Sfr dl}.ngIDE hB trg I~p trinh
Hi~n nay, co reltnhi~u IDE h6 trg l~p trinh cho Node.js. Trong do, l~p trinh
vien co th~ t~n dVng cong ngh~ di~n toan dam may d~ lam vi~c tflJc tuy~n
ho~c tv cai d~t IDE len may tinh.
1.4.2.1/ Sfr dl}.ngtr\fe tuy~n qua e9.io
C9.io vi~t tAt cua Cloud9, la m9t dich V\l su dVng cong ngh~ cua Node.js,
cung celpmoi truang phat tri~n cho Node.js, HTML, JavaScript, CSS, ngoai
ra con co XML, Python va Ruby. Vi su dVng online, nguai dung chi cftn duy
nheltrinh duy~t cung m9t duang truy~n Internet nhanh va 6n dinh.
Sau khi t?O xong tai khoim tren c9.io, nheln van mvc "Create New
Workspace"
Trong menu hi~n ra, chQn"Create a New Workspace" d~ t?Oproject m6'i ho~c
chQn"Clone from URL" n~u mu6n phat tri~n code tu m9t Workspace s~n co.
Trong cua s6 "Create a New Workspace", d~t ten Tuy
your workspace".

y

trong mvc "Name


Chuang 1/ Gim thi?u t6ng quan


vJ NodeJs

29

Create a New Workspace

Name your wor1cspace

,

WOflGP3-:e PnvaOl'

0

Ty'pe Of worts pace



Open and

OISCO'J'ef"3b1e



Grt

Uercurial

FTP


Pnvate to rtIe pe~e

IU'Mle (1 out

of

1 ,.ft)

SSH

Grt works paces dont have any options to set at this time

CANCEL

Hioh 1-9 Cfra

sA "Create

a New Workspace"

cua C9.io

Trong rn\lCWorkspace Privacy:
- Chc.m"Open and Discoverable" n~u rnu<3ncho phep beltkY ai cling co
th~ tim thely va truy c~p, my chQn nay phil hQ'Pcho nhUng project rna ngu6n
rna, ai cling co th~ vao, phat tri~n thang cac nhanh khac nhau.
- ChQn "Private to the people I invite" n~u rnu<3nchi cho phep nhUng ai
duQ'crnm rn6i truy c~p duQ'c,phil hQ'Pcho nhUng project rna ngu6n dong. Tuy
nhien, c9,io hi~n chi cho phep rnQt Workspace nay rnQt tai khoan. N~u rnu<3n

nhi€u hon, cAnphiii chuy~n sang tai khoan co phi.
Sau do, chQn Create va cha rnQt hIc d~ c9.io chufrn bi rnoi wang
Sau khi hoan telt,chQnten Workspace va nhfrn "Start Editing".
Giao di~n lam vi~c cua c9.io hi~n ra nhu sau:

lam vi~c.


×