Professional Documents
Culture Documents
TRNG AI HC KHOA HC
KHOA CNG NGH THNG TIN
MN : LP TRNH MANG
Ti : Tm hiu v node.js
TM HIU V NODE.JS
I. Gii thiu.
Node.js l mt h thng phn mm c thit k vit cc ng dng internet c kh
nng m rng, c bit l my ch web. Chng trnh c vit bng JavaScript, s dng k
tht iu khn theo s kin, nhp/xut khng ng b ti tiu tng chi ph v ti i kh
nng m rng. Node.js bao gm c V8 JavaScript engine ca Google, libUV, v vi th vin
khc.
Node.js c to bi Ryan Dahl t nm 2009, v pht trin di s bo tr ca Joyent.
Mc tiu ban u ca Dahl l lm cho trang web c kh nng push nh trong mt s ng
dng web nh Gmail. Sau khi th vi vi ngn ng Dahl chn Javascript v mt API
Nhp/Xut khng y . iu ny cho php anh c th nh ngha mt quy c Nhp/Xut
iu khin theo s kin, non-blocking.
Vi mi trng tng t c vit trong cc ngn ng khc bao gm Twisted
cho Python, Perl Object Environment cho Perl, libevent cho C v EventMachine cho Ruby.
Khc vi hu ht cc chng trnh Javascript, Nodejs khng chy trn mt trnh duyt m
chy trn Server. Node.js s dng nhiu chi tit k thut ca CommonJS. N cung cp mt
mi trng REPL cho kim th tng tc.
Node.js c InfoWorld bnh chn l Cng ngh ca nm nm 2012.
bt u dng Node.js, bn phi hiu s khc nhau gia Node.js vi cc mi trng
truyn thng chy trn server (server side) ph bin nh PHP, Python, Ruby, etc
1. Lp trnh khng ng b
L li th nu bn quen thuc vi cc phng php lp trnh khng ng b. Tt c cc
hm trong Node.js l khng ng b. Do , tt c chy nh cc block thread thng thng
thay v chy nn. y l iu quan trng nht nh v Node.js. V d, nu bn ang c
mt tp tin trn h thng tp tin, bn phi ch nh mt chc nng gi li l thc hin khi
hon thnh cc hot ng c.
2. Bn phi lm tt c
Node.js ch l mi trng iu c ngha l bn phi t lm tt c. khng phi l
mt server http ngm nh hoc l bt c server no khc. iu ny c th l hi kh hiu
vi ngi mi, nhng thnh cng thc s ca n l a li mt hiu nng ng kinh ngc .
Mt scrits c th iu phi mi kt ni vi cc client. iu ny lm s dng t ti nguyn
a n mt hiu qu rt cao. V d sau v mt ng dng 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 tng ng vi 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 chm im benchmark cho hai on code trn khi chy trn hai mi trng
khc nhau:
Number of
iterations
Node.js
PHP
100
2.00
0.14
10000
3.00
10.53
1000000
15.00
1119.24
10000000
143.00
10621.46
1000000000
11118.00
1036272.19
Ti thc hin chy hai on code trn t command line (console command) nn khng c
tr thao tc thc thi. Ti chy tng th nghim 10 ln v ly kt qu trung bnh. PHP nhanh
hn trong cc ln chy vi s lng nh vng lp. Nhng vn thay i khi s lng vng
lp tng ln, s ln x l tng ln th PHP chy chm hn rt nhiu trong khi Node.js c tc
ng kinh ngc. Sau tt c thao tc, PHP chm hn 93% so vi Node.js.
3. Module
Node.js s dng mt kin trc m-un n gin ha vic to ra cc ng dng phc tp.
M-un ging nh cc th vin trong C, hoc cc n v trong Pascal. Mi module c cha
mt tp hp cc chc nng lin quan n "i tng" ca cc m-un. V d, cc m-un
http cha cc chc nng c th cho HTTP. Node.js cung cp mt vi m-un c bn gip
bn truy cp cc tp tin trn h thng tp tin, to ra trnh iu khin server HTTP v TCP /
UDP v thc hin cc chc nng hu ch khc.
gi mt modul tht d dng, ch cn gi hm require() nh sau
Var http = require(http);
var PI = Math.PI;
exports.area = function (r) {
return PI * r * r;
};
exports.circumference = function (r) {
return 2 * PI * r;
};
Nhng cc bin global nn trnh s dng, v xin nh cn thn rng khi khai bo bin th
dng t kha var thc hin.
5. Cng ng
Cng ng pht trin Node.js ch yu tp trung hai nhm google : nodejs v nodejs-dev,
mt knh IRC l #node.js trn mng freenode. C mt hi tho v Node.js l NodeConf c
t chc thng nin.
Hin nay Node.js c s dng bi nhiu cng ty trong c Linkedin, Microsoft,
Yahoo! v Walmart.
II. Installation
1. Installing Node.js .
Hin nhin l bn phi hc cch ci t node trc khi mun vit v chy bt c ng dng
no trn nn node. Ci t node th rt l n gin, bn l ngi s dng window hay linux
Hoc:
sudo aptitude update
sudo aptitude install node
Cc console obiects s dng mt s lnh c s dng xut thng tin stdout hoc
stderr. Chng l cc lnh nh:
console.log ([data], [...])
Phng php console obiects c s dng thng xuyn nht l console.log(), m ch
n gin l vit cho stdout v gn mt ngun cp d liu dng (\ n
console.log (wahoo ');
// => Wahoo
console.log ({foo: 'bar'});
// => [Object Object]
console.time(label)
nh du thi gian bt u.
console.timeEnd (label)
Thi gian kt thc, c ghi vo u ra.V d:
console.time('100-elements');
for (var i = 0; i < 100; i++) {
;
}
console.timeEnd('100-elements');
console.trace(label)
// Version v0.8.16
process.execPath
ng dn n th mc thc thi chnh ca chng trnh "/ usr / local / bin / node".
process.platform
Cc nn tng bn ang s dng. V d, "darwin".
process.pid
Cc process ID.
process.stdout ()
Mt lung c th ghi c n stdout.
V d: nh ngha v console.log().
console.log = function (d) {
process.stdout.write (d + '\ n');
};
process.stderr ()
Tng t nh process.stdout() nhng y l ghi n stderr.
process.stderr() v process.stdout() l khng ging nh lung khc trong Node,
khi vit chng thng b blocking. Chng b blocking trong trng hp m chng lin quan
n cc tp tin thng xuyn hoc m t tp tin TTY. Trong trng hp chng lin quan n
cc pipes, chng khng b blocking nh nhng lung khc.
process.stdin ()
Mt lung c th c c cho stdin. Cc dng stdin b tm dng theo mc nh, do ,
ngi ta phi gi process.stdin.resume () c t n.
V d m u vo chun v lng nghe c hai s kin:
process.stdin.resume ();
process.stdin.setEncoding ('utf8');
process.cwd ( )
Tr v th mc lm vic hin ti. V d:
cd ~ && node
node> process.cwd() "/Users/tj"
process.chdir ( )
Thay i th mc lm vic hin ti.
process.chdir('/ foo');
process.getuid ( )
Tr v s user ID ca process ang chy.
process.setuid ( )
Thit lp user ID c hiu lc cho qu trnh ang chy. Phng php ny chp nhn c mt
s ID, cng nh mt chui. V d c hai process.setuid(501), v
process.setuid('tj') u hp l.
process.getgid ( )
Tr v s group ID ca process ang chy.
process.setgid ( )
Tng t nh process.setuid() tuy nhin c s dng trong group, cng chp nhn
mt s gi tr hoc chui i din. V d, process.setgid(20) hoc
process.setgid('www').
process.chdir (directory)
Thay i th mc lm vic hin ti ca process hoc a mt ngoi l nu tht bi.
console.log ('Starting directory: '+ process.cwd ());
try {
process.chdir ('/ tmp');
console.log ('New directory:' + process.cwd ());
}
catch (err) {
process.env
Mt i tng c cha cc bin mi trng ca ngi s dng. V d:
{ PATH:
'/Users/tj/.gem/ruby/1.8/bin:/Users/tj/.nvm/current/bin:/usr/bin:/bin:/u
s
/sbin:/sbin:/usr/local/bin:/usr/X1
, PWD: '/Users/tj/ebooks/masteringnode'
, EDITOR: 'mate'
, LANG: 'en_CA.UTF-8'
, SHLVL: '1'
, HOME: '/Users/tj'
, LOGNAME: 'tj'
, DISPLAY: '/tmp/launch-YCkT03/org.x:0'
, _: '/usr/local/bin/node'
, OLDPWD: '/Users/tj'
}
process.argv
Khi thc hin mt tp tin vi cc nt thc thi process.argv cung cp truy cp vo cc
vector i s, gi tr u tin l nt thc thi, th hai l tn tp tin, v gi tr cn li l cc i
s c thng qua.
V d, tp tin ngun ca chng ta ./src/process/misc.js c th c thc hin bng cch
chy:
$ node src/process/misc.js foo bar baz
process.exit ([code])
Lnh process.exit() l ng ngha vi hm C exit(), trong code > 0 c bit l
tht bi, hoc 0 c bit l thnh cng. Khi c gi, vic exit c pht ra, cho php mt
thi gian ngn ch bin ty xy ra trc khi process.reallyExit() c gi vi
m trng thi nht nh.
process.on ( )
Process t n l mt EventEmitter, cho php bn lm nhng iu nh lng nghe cho
cc trng hp ngoi l cha b bt thng qua s kin uncaughtException:
process.on('uncaughtException', function(err){
console.log('got an error: %s', err.message);
process.exit(1);
});
setTimeout(function(){
throw new Error('fail');
}, 100);
Errno
Process object ny lu tr ca cc con s bo hiu li ti my ch, tham kho nhng g
bn s tm thy trong C-land. V d, process.EPERM i din cho mt li da trn s cho
php, trong khi process.ENOENT i din cho mt tp tin hoc th mc b thiu. Thng
thng y l nhng c s dng trong cc rng buc thu hp khong cch gia C++ v
JavaScript, nhng chng hu ch cho vic x l cc trng hp ngoi l nh:
if (err.errno === process.ENOENT) {
// Display a 404 "Not Found" page
} else {
// Display a 500 "Internal Server Error" page
}
c. Buffers
C bn JavaScript l Unicode thn thin, nhng khng phi vi d liu nh phn. Khi giao
tip vi lung TCP hoc h thng tp tin, liu nh phn cn thit x l cc lung octet.
Node cung cp mt s phng php cho vic khai thc, to v s dng lung octet.
x l cc d liu nh phn, node cung cp cho chng ta vi cc i tng ton cc.
Buffer l tng t nh mt mng cc s nguyn, nhng tng ng vi vic cp pht b nh
th bn ngoi V8 heap. Buffer khng th c thay i kch c. C mt s cch xy dng
mt trng hp b m, v nhiu cch bn c th thao tc d liu ca n.
Chuyn i gia Buffers v cc i tng chui JavaScript i hi mt phng php m
ha r rng. Di y l chui cc bng m khc nhau.
'ascii' - 7 bit d liu ASCII duy nht. Phng php m ha ny l rt nhanh chng,
v s loi b cc bit cao nu thit lp. Lu rng vic m ha ny chuyn i mt k
t null ('\ 0' hoc '\ u0000') vo 0x20 (m k t ca mt khng gian). Nu bn mun
chuyn i mt k t null vo 0x00, bn nn s dng 'utf8'.
'utf8' - Nhiu byte m ha k t Unicode. Nhiu trang web v cc nh dng ti liu
khc s dng UTF-8.
'utf16le - 2 hoc 4 byte, k t Unicode m ha t v cui. Cc cp i din (U
10.000 FFFF 10 U) c h tr.
'UCS2' - Tng t 'utf16le'.
'base64' - M ha chui Base64.
'binary' - Mt cch m ha d liu nh phn thnh chui bng cch s dng 8 bit
u tin ca mi k t. Phng php m ha ny b phn i v nn trnh s dng
cc i tng b m nu c th. M ha ny s c loi b trong cc phin bn
tng lai ca Node.
'hex' - M ha mi byte l hai k t thp lc phn.
Buffer cng c th c s dng xem mng kiu v DataViews.
var buff = new Buffer(4);
var ui16 = new Uint16Array(buff);
var view = new DataView(buff);
ui16[0] = 1;
ui16[1] = 2;
console.log(buff);
view.setInt16(0, 1);
console.log(ellipsis);
// => <Buffer e2 80 a6>
2. S kin (Event).
Khi nim v mt "s kin" l rt quan trng trong node, v c s dng rt nhiu trong
sut module chnh ca chng trnh v module ca bn th 3. Module s kin chnh ca
Node cung cp cho chng ta vi mt hm to, EventEmitter.
a. EventEmitter
Thng thng mt i tng k tha t EventEmitter, tuy nhin v d nh di y minh
ha API. u tin chng ta to ra mt emitter, sau chng ta c th xc nh bt k s
lng callbacks s dng emitter.on() phng php, m chp nhn tn ca cc s kin v
cc i tng ty thng qua nh l d liu. Khi emitter.emit() c gi, chng ta ch
required truyn cc tn s kin, theo sau bi bt k s lng tham s (trong trng hp
ny cc chui tn u tin v cui cng).
var EventEmitter = require('events').EventEmitter;
var emitter = new EventEmitter;
emitter.on('name', function(first, last){
console.log(first
', '
last);
});
emitter.emit('name', 'tj', 'holowaychuk');
emitter.emit('name', 'simon', 'holowaychuk');
By gi chng ta c Dog c thnh lp, chng ta c th to ra ... Simon! Khi Simon bark,
chng ta c th cho stdout bit bng cch gi console.log() vi callback. Callback chnh
n c gi l trong ng cnh ca cc i tng
var simon = new Dog('simon');
simon.on('bark', function(){
console.log(this.name
' barked');
});
3. Lung ( Streams ).
Streams l mt khi nim quan trng trong nt. Cc lung API l mt cch duy nht x
l lung ging nh d liu. V d, d liu c th c xem trc tip mt tp tin, trc tip vo
mt socket p ng mt HTTP request, hoc trc tip t mt ngun ch cho c nh stdin.
by gi, chng ta s tp trung vo cc API, li cc chi tit c th lung chng sau.
a. Readable Streams
Readable Streams c xem nh mt HTTP request k tha t EventEmitter l d
liu n qua cc s kin. Vic u tin ca nhng s kin ny l s kin d liu, l mt on
ty ca cc d liu c truyn i x l s kin nh l mt trng hp m ( Buffer
instance ).
req.on('data', function(buf){
// Lm g vi Buffer
});
Mt s kin quan trng khc l kt thc, i din cho s kt thc ca d liu s kin. V
d, y l mt HTTP echo server, ch n gin l "simply" cc request body data thng qua
cc response. V vy, nu chng ta POST "hello world", response ca chng ta s l " hello
world ".
var http = require('http');
http.createServer(function(req, res){
res.writeHead(200);
req.on('data', function(data){
res.write(data);
});
req.on('end', function(){
res.end();
});
}).listen(3000);
Module sys thc s c mt chc nng c thit k c bit cho hnh ng "simply" ny,
aptly tn sys.pump(). N chp nhn mt lung c nh l i s u tin, v vit dng th
hai.
var http = require('http'),
sys = require('sys');
http.createServer(function(req, res){
res.writeHead(200);
sys.pump(req, res);
}).listen(3000);
stream.readable
Gi tr boolean c mc nh l true, nhng s thnh false sau khi xy ra mt li, lung
n mt 'kt thc', hoc destroy() c gi.
stream.setEncoding ([encoding])
Lm cho 'data' s kin pht ra mt chui thay v mt b m. encoding c th l 'utf8',
'utf16le'('UCS2'),'ascii', hoc 'hex'. Mc nh l 'utf8'. Nh chng ta bit, chng
ta c th gi toString() trn mt b m tr v mt chui i din ca d liu nh phn.
Tng t nh vy, chng ta c th gi setEncoding() trn mt lung, sau d liu s
kin s pht ra chui.
req.setEncoding('utf8'); req.on('data', function(str){
// Lm g vi String
});
stream.pause ()
Vn l mt tn hiu t vn cho cc lp giao tip c bn, yu cu khng c thm d liu
c gi cho n khi resume() c gi.
Lu rng, do tnh cht t vn, lung nht nh s khng c tm dng ngay lp tc, v
do , s kin 'data' c th c pht ra cho mt khong thi gian khng xc nh, ngay c
sau khi pause() c gi.
stream.resume ()
Tip tc li s kin 'data' sau khi pause().
stream.destroy ()
ng tp tin m t c bn. Stream l khng cn c th ghi v cng khng th c c.
Cc dng s khng pht ra bt k chi tit 'data', hoc s kin 'kt thc'. Bt k d liu ghi
xp hng s khng c gi i. Cc lung c ti s kin 'close' khi ngun lc ca mnh
c x l.
stream.pipe (destination, [options])
y l mt phng php Stream.prototype c sn trn tt c cc lung.
Kt ni ny c dng WriteStream im n. D liu n trn lung ny c ghi n
ch. Cc lung ch v ngun c gi ng b bng cch tm dng v khi phc khi cn
thit. Chc nng ny tr v cc lung ch.
b. Writable Stream.
Mt lp c s cho vic to ra cc Writable Stream. Tng t nh Readable Stream, bn
c c th to ra cc lp con bng cch ghi khng ng b khi s dng cu lnh
_write(chunk, cb).
stream.writable
Gi tr boolean c mc nh l true, nhng s thnh false sau khi li xy ra hoc
end() /destroy() c gi.
stream.Write (string, [encoding])
Vit chui vi encoding cho lung. Tr v true nu chui c b vo b m kernel.
Tr v false cho bit rng b m kernel y, v d liu s c gi i trong tng lai.
S kin 'drain' s cho bit khi no b m kernel l rng mt ln na. Vic m ha mc nh
'utf8'.
stream.Write (buffer)
Tng t nh trn, ngoi tr vi mt b m th.
stream.end ()
Kt thc dng vi EOF hoc FIN. Cuc gi ny s cho php hng i ghi d liu c
gi trc khi ng lung.
stream.end (string, encoding)
Gi chui vi m ha nht nh v chm dt dng vi EOF hoc FIN. iu ny rt hu
ch gim s lng cc gi tin gi i.
stream.end (buffer)
Tng t nh trn, nhng vi mt b m.
stream.destroy ()
ng m t tp tin c bn. Stream l khng cn c th ghi v cng khng th c c.
cc lung s khng pht ra bt k chi tit 'data', hoc s kin 'kt thc'. Bt k hng i d
liu ghi s khng c gi i. cc lung c ti s kin 'close' khi ti nguyn ca mnh
c x l.
stream.destroySoon ()
Sau khi ghi hng i c gii phng, ng tp tin m t. destroySoon() vn c th hy
ngay lp tc, min l khng c d liu cn li trong hng i vit.
4. File System
lm vic vi h thng tp tin, node cung cp module "fs". Cc lnh thc thi cc hot
ng POSIX, v hu ht cc phng php lm vic ng b hoc khng ng b. Chng ta
s xem xt lm th no s dng c hai, sau thit lp la chn tt hn.
a. Lm vic vi tp tin h thng.
Cho php bt u vi mt v d c bn lm vic vi tp tin h thng. V d ny to mt
th mc, to ra mt tp tin bn trong n, sau vit ni dung ca tp tin n console:
var fs = require('fs');
fs.mkdirSync('./helloDirSync',0777);
fs.writeFileSync('./helloDirSync/message.txt', 'Hello Node');
var data = fs.readFileSync('./helloDirSync/message.txt','UTF-8');
console.log('file created with contents:');
console.log(data);
%s',JSON.stringify(stats));
});
});
});
c. Xem cc tp tin.
Phng php fs.watchfile theo di mt tp tin v thay i mt s kin bt c khi no tp
tin c thay i.
var fs = require('fs');
fs.watchFile('./testFile.txt', function (curr, prev) {
console.log('the current mtime is: ' + curr.mtime);
console.log('the previous mtime was: ' + prev.mtime);
});
fs.writeFile('./testFile.txt', "changed", function (err) {
if (err) throw err;
console.log("file write complete");
});
request.headers
c bn duy nht ca tn header v gi tr. Tn header l lower-cased. V d:
// In mt ci g nh:
request.trailers
Ch c HTTP trailer (nu c).
request.httpVersion
Phin bn giao thc HTTP nh mt chui. Ch c. V d: '1.1 ', '1.0'. Ngoi ra
request.httpVersionMajor l s nguyn u tin v request.httpVersionMinor l th
hai.
request.setEncoding ([encoding])
Thit lp m ha cho c ch request. Xem stream.setEncoding() bit thm thng
tin.
request.pause ()
Tm dng request t cc s kin pht ra. Rt hu ch tng tc ti ln.
request.resume ()
Tip tc li request tm dng.
request.connection
Cc i tng net.Socket kt hp vi kt ni. Vi h tr HTTPS, s dng
request.connection.verifyPeer() v request.connection.getPeerCertificate()
c c thng tin xc thc ca client.
c. Class: http.ServerResponse.
i tng ny c to ra trong ni b ca mt HTTP server - khng phi bi ngi s
dng. N c thng qua nh l tham s th hai ca s kin 'request'. Response thc hin
cc giao din Writable Stream.
response.writeHead (statusCode [reasonPhrase], [headers])
Gi mt response headers p ng yu cu. statusCode l mt trng thi HTTP c 3
ch s m, ging nh 404. Ty chn c th a ra mt reasonPhrase nh l i s th hai.
V d:
var body = 'hello world';
response.writeHead(200, {
'Content-Length': body.length,
hoc
response.setHeader ("Set-Cookie", "loi = ninja", "ngn ng = javascript
"]);
response.sendDate
Khi gi tr l true, date header s c t ng to ra v gi response nu n khng phi l
c trong cc header. Mc nh l true.
response.getHeader (name)
c ra mt header c xp hng i nhng khng gi cho client. iu ny ch c
th c gi l trc khi header nhn c.
V d:
var contentType = response.getHeader ('content-type');
response.removeHeader (name)
Loi b mt header xp hng i gi ngm.
V d:
response.removeHeader ("Content-Encoding");
th hai.
response.headers
i tng response headers .
response.trailers
Trailer i tng response.
response.setEncoding ([encoding])
Thit lp m ha cho c th phn ng. Xem stream.setEncoding () bit thm thng
tin.
response.pause ()
Tm dng response t cc s kin pht ra. Hu ch tng tc ti v.
response.resume ()
Tip tc li mt response b tm dng.
6. c thm Nodejs Docs.
Trn y ch l cc i tng c bn c nn ra, vn cha c y v vy mun tm
hiu su v Node.js th nn xem cc ti liu ca Node API c bin son rt chi tit v lit
k tt c cc lnh h thng tp tin c th c sn khi lm vic vi Node.js.
IV. Cc ng dng c xy dng trn nn Node.js.
1. ng dng u tin.
ng dng u tin bn nn to vi nodejs l ng dng in ch Hello World trn ca s
console. To mt file vi tn hello.js, vi ni dung sau:
console.log('Hello World!');
stream.write('hello\r\n');
stream.on('end', function () {
stream.end('goodbye\r\n');
});
stream.pipe(stream);
}).listen(8080);
3. X l cc tham s URL
Nh ni trc, ta phi t lm mi th trong node. Hy xem code ca v d sau:
// Khai bo http module.
var http = require("http"),
// v url module, n rt hu ch trong vic phn tch tham s request.
url = require("url");
// To server.
http.createServer(function (request, response) {
// Gn listener v kt thc s kin.
request.on('end', function () {
// Phn tch request cho cc i s v lu chng trong bin _get.
// Hm ny phn tch cc url t reqest v tr v cc i tng i
din.
var _get = url.parse(request.url, true).query;
// Vit headers cho response.
response.writeHead(200, {
'Content-Type': 'text/plain'
});
// Gi d liu v kit thc response.
response.end('Here is your data: ' + _get['data']);
});
// Lng nghe ti cng 8080.
}).listen(8080);
Phn code ny dng phng thc parse() ca module url, mt module li ca Nodejs,
convert t request url thnh object. Phng thc tr li object l phng thc query, s ly
li thng s ca URL. Lu file ny thnh get.js v thc thi trn ca s lnh:
node get.js
});
} else {
//Cho bit nu tp tin request khng c tm thy.
response.writeHead(404);
// v kt thc request m khng gi d liu no.
response.end();
}
});
// Lng nghe ti cng 8080.
}).listen(8080);
Lu file li thnh file files.js. Trc khi chy file ny trn ca s command, to mt
file test.txt cng th mc vi file file.js.
Hy chy v kim tra kt qu.
5. Nodejs vi mysql
Hu ht cc mi trng truyn thng chy server side u c nhng chc nng km theo
thao tc vi database. Vi Node.js, bn phi ci thm th vin. Vi bi vit ny, ti chn
mt th vin kh n nh dng. Tn y ca module th vin l: mysql@2.0.0-alpha2
(pha sau @ ch l tn phin bn). M ca s command, dng npm ci module ny ln vi
lnh:
npm install mysql@2.0.0-alpha2
database: "db_name"
});
// To http server.
http.createServer(function (request, response) {
// Gn listener v kt thc s kin.
request.on('end', function () {
// Truy vn c s d liu.
connection.query('SELECT * FROM your_table;', function (error,
rows, fields) {
response.writeHead(200, {
'Content-Type': 'x-application/json'
});
// Gi d liu l chui JSON.
// Bin rows gi kt qu ca cc truy vn.
response.end(JSON.stringify(rows));
});
});
// Lng nghe cng 8080.
}).listen(8080);
1. Tm hiu v Socket.IO
Vi Node.js, bn ch cn bit vi hm c bn nh requires() import th vin. Cng vic
cn li, ch cn dng Socket.IO nn bn cn phi tm hiu v th vin ny ti y:
http://socket.io/#how-to-use.
- Server: to mt i tng socket bng phng thc listen(port). Phng thc ny
ch i mt yu cu kt ni t client.
- Client: Kt ni n server bng phng thc connect(url,{port: server_port}).
- Socket.IO cung cp 3 event chnh l connect, message v disconnect. Chng c kch
hot khi client/server:
+ connect: to kt ni
+ message: nhn c thng ip
+ disconnect: ngt kt ni
V d:
socket.on("message", function(msg){
// console.log("Received: "+ msg);
});
}
);
Client.html:
<html>
<head>
<title>WebSocket Client</title>
<script src="http://localhost:8080/socket.io/socket.io.js"></script>
<script>
window.onload = function(){
var input = document.getElementById('input');
var output = document.getElementById('output');
3. ng dng webchat.
a. Xy dng mt webchat server c bn.
Trc tin, ta s nhp cc m-un Socket.IO.
var exp = require('express');
var app = exp.createServer();
});
Tip theo ta s to ra mt " connections object " theo di ngi dng kt ni.
var connections = { };
Kch bn pha client s pht ra mt s kin "user-ready" sau khi mt ngi kt ni thnh
cng v c giao mt tn. Server s lu tr gi tr trong socket server s dng trong
tng lai. Server cng s giao cho ngi s dng mi c kt ni mt mu ngu nhin t
mng mu sc c sn.
global.socket.of('/chat').on('connection', function(socket) {
socket.on('user-ready', function(data) {
socket.name = data.name;
socket.color = data.color = colors[Math.floor(Math.random() *
colors.length)];
// let everyone else in the room know a new user has just connected //
brodcastMessage('user-ready', data);
});
delete connections[socket.id];
dispatchStatus();
brodcastMessage('user-disconnected', { name : socket.name, color :
socket.color });
});
dispatchStatus v broadcastMessage ch l cc shortcut pht s kin tr li vi
phn cn li ca nhm.
function dispatchStatus()
{
brodcastMessage('status', connections);
}
function brodcastMessage(message, data)
{
socket.emit(message, data);
socket.broadcast.emit(message, data);
}
Khi mt ngi dng gi tin nhn cho thm mu sc kt hp vi Socket ca mnh vo tin
nhn chng ti c th hin th mu sc thch hp trong nht k tr chuyn khi pht tr li
vi phn cn li ca nhm.
socket.on('user-message', function(data) {
data.color = socket.color;
brodcastMessage('user-message', data);
});
l nhng khng gian tn ring bit cho php cc ng dng chatc th duy tr quyn t
ch trong khi chy nh tn min ph ca ng dng Node.
$('#btn-send').click(function(){ sendMessage(); })
var sendMessage = function() {
By gi m trnh duyt v vo ng dn :
http://localhost:8080
Kt qu:
Kt lun
Node.js i hi phi lm thm nhiu vic, nhng phn thng ca mt ng dng nhanh
chng v mnh m l gi tr n. Node.js l mt cng ngh y ha hn v l s la chn
tuyt vi cho mt ng dng cn c hiu nng cao, nhiu kt ni. N c chng minh bi
cc cng ty nh Microsoft, eBay v Yahoo.