ây là quá trình có ho c xu t giá tr các bi n trên mã ngu n ch ng trình... th ng nhúng.. B ng sau đây li t kê nh ng trình g l i C/C++ ph bi n: Fortran, Java BSD Objective-C, Free Pascal,
Trang 2TR NG I H C KHOA H C T NHIÊN KHOA CÔNG NGH THÔNG TIN
Trang 3i
NH N XÉT C A GIÁO VIÊN H NG D N
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
TP H Chí Minh, ngày … tháng …… n m 2012 Giáo viên h ng d n
Trang 4ii
NH N XÉT C A GIÁO VIÊN PH N BI N
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
……… Khóa lu n đáp ng yêu c u c a Khóa lu n c nhân CNTT
TP H Chí Minh, ngày … tháng …… n m 2012 Giáo viên ph n bi n
Trang 5i
L I C M N
Chúng em xin chân thành c m n Khoa Công ngh Thông tin, tr ng i
h c Khoa h c T nhiên TP H Chí Minh đã t o đi u ki n cho chúng em th c hi n
đ tài khóa lu n t t nghi p này
Chúng em xin g i l i c m n sâu s c đ n PGS.TS Tr n an Th , ng i đã
tr c ti p h ng d n và t n tình ch b o chúng em trong su t th i gian th c hi n đ tài Th y đã truy n đ t cho chúng em nhi u ki n th c quan tr ng c ng nh đ nh
h ng đ chúng em có th hoàn thành khóa lu n
Chúng em xin chân thành c m n quý Th y Cô trong Khoa đã cho chúng em
nh ng ki n th c quý báu trong su t th i gian khóa h c, cho chúng em m t n n t ng
lý thuy t v ng ch c và nh ng k thu t c b n thi t y u c bi t chúng em mu n
c m n anh ng Hoàng H i và anh Tr n Thanh H i đã giúp đ t n tình trong quá trình th c hi n đ tài
Chúng con xin chân thành c m n b m , anh ch em và t t c ng i thân trong gia đình đã t o m i đi u ki n t t nh t, đ ng viên khích l chúng con trong quá trình h c t p nói chung và quá trình làm khóa lu n t t nghi p nói riêng
M c dù chúng em đã c g ng hoàn thành lu n v n trong ph m vi và kh n ng cho phép, nh ng ch c ch n s không tránh kh i nh ng thi u sót, kính mong s c m thông và t n tình ch b o c a quý Th y Cô và các b n
Tp H Chí Minh, tháng 6 n m 2012
Nhóm sinh viên Nguy n ình V nh An - Nguyên Kha
Trang 6 Nghiên c u hi n tr ng và xây d ng mô hình
Tìm hi u công ngh và xây d ng ng d ng minh h a
N i dung đ tài:
N i dung và yêu c u đ tài
Nghiên c u và t ng h p hi n tr ng công c h tr tìm l i trong các môi tr ng phát tri n tích h p trên môi tr ng truy n th ng desktop và môi tr ng web
Tìm hi u các công c h tr l p trình web, đ c bi t là các k thu t web th i gian
th c; bên c nh đó là các th vi n và b khung phát tri n ng d ng cho các ng
d ng web d ng đ n trang
xu t mô hình công c h tr tìm l i ng d ng C/C++ trên web
Xây d ng công c minh h a h tr tìm l i ng d ng C/C++ trên môi tr ng web
Trang 7iii
Ph ng pháp th c hi n
T n d ng các tài li u thi t k c a môi tr ng phát tri n tích h p đã có trên desktop đ nghiên c u mô hình các công c h tr tìm l i
Phát tri n h th ng d a trên các thành ph n mi n phí và mã ngu n m
Th c hi n báo cáo ti n đ h ng tu n v i giáo viên h ng d n
Tài li u hóa các b c th c hi n, tài li u tham kh o và các kh o sát làm c s cho khóa lu n
K t qu khóa lu n:
Xây d ng thành công mô hình và công c minh h a cung c p ch c n ng h tr tìm l i ng d ng C/C++ trên môi tr ng web S n ph m cho phép đi u khi n quá trình th c thi, đ i chi u t ng ng v trí trên mã ngu n, kh o sát các bi n c c b trong hàm hi n hành
Báo cáo t ng h p hi n tr ng các công c h tr tìm l i ng d ng C/C++, các k thu t t ng tác web th i gian th c và các h ng phát tri n trong t ng lai
o Tu n 1: Th nghi m kh thi k t n i th i gian th c gi a trình duy t và máy
ch là đi u ki n kh thi cho phép công c h tr tìm l i trên web có th
ho t đ ng;
o Tu n 2, 3, 4: Xây d ng th nghi m đ n gi n cho phép th c hi n tìm l i
ng d ng C/C++
Trang 8iv
01/02/2012 – 31/03/2012: Xây d ng mô hình
o Tu n 1, 2: Tìm hi u mô hình Eclipse;
o Tu n 3, 4, 5: Tìm hi u gdb và các k thu t web th i gian th c;
o Tu n 6, 7, 8: Xây d ng mô hình công c h tr tìm l i
01/04/2012 – 01/06/2012: Phát tri n ng d ng minh h a
o Tu n 1, 2, 3: Xây d ng các thành ph n c a máy ch web;
o Tu n 4, 5, 6: Xây d ng các thành ph n x lý trên trình duy t;
Nguy n ình V nh An Nguyên Kha
Trang 9v
M C L C
CH NG 1 M U 1
1.1 Gi i thi u chung 1
1.2 Môi tr ng phát tri n tích h p trên web 2
1.3 M c tiêu nghiên c u 2
1.4 i t ng nghiên c u 3
1.5 Ph m vi đ tài 3
CH NG 2 T NG QUAN CÁC CÔNG C H TR TÌM L I 4
2.1 L ch s công c h tr tìm l i 4
2.2 Công c h tr tìm l i trong môi tr ng phát tri n tích h p h tr ng d ng C/C++ 5
2.3 Công c trên web h tr tìm l i 8
CH NG 3 TRÌNH G L I H TR NG D NG C/C++ VÀ WEB TH I GIAN TH C 12
3.1 Trình g l i h tr ng d ng C/C++ 12
3.2 K thu t nh p xu t b t đ ng b .16
3.3 JavaScript 19
3.4 Web th i gian th c 20
3.5 Node.js – Nh p xu t b t đ ng b và l p trình h ng s ki n 23
3.6 Công c h tr tìm l i c a Eclipse 25
CH NG 4 MÔ HÌNH CÔNG C TRÊN WEB H TR TÌM L I NG D NG C/C++ 29
4.1 Ki n trúc h th ng 29
Trang 10vi
4.2 Thi t k phân h máy ch .34
4.3 Thi t k phân h trình duy t 40
4.4 Giao th c kênh REST 53
4.5 Giao th c kênh Socket 55
4.6 Khung nhìn 57
CH NG 5 CÀI T VÀ TRI N KHAI H TH NG 60
5.1 T ng quan h th ng 60
5.2 Cài đ t phân h máy ch .60
5.3 Cài đ t phân h trình duy t 64
5.4 Tri n khai h th ng 71
CH NG 6 K T QU VÀ H NG PHÁT TRI N 74
6.1 K t qu khóa lu n 74
6.2 H ng phát tri n 76
TÀI LI U THAM KH O 80
PH L C .82
A.1 M t s gi i pháp cho phép máy ch chuy n d li u đ n trình duy t ch đ ng 82
A.2 M t s s đ tu n t khác trong quá trình th c thi ng d ng 84
A.3 Các tài nguyên và ph ng th c REST 88
A.4 Các s ki n kênh Socket 89
A.5 Các th vi n h tr JavaScript 91
Trang 112 Breakpoint Cho phép d ng ng d ng đang th c
thi t i m t v trí trong mã ngu n ho c
Model
Mô hình bi u di n và t ng tác v i các đ i t ng trong các tài li u HTML, XHTML, XML
Trang 12viii
World Wide Web
10 IDE
Integrated Development Environment
Môi tr ng phát tri n tích h p – h
th ng t ng h p nhi u công c h tr phát tri n ph n m m
11 JSON JavaScript Object
Notation
nh d ng trao đ i d li u đ n gi n
d a trên ngôn ng l p trình JavaScript
th c thi trong call stack
các ng d ng đa lu ng
Ghi chú: các gi i ngh a ti ng Vi t đ c trình bày d a trên Wikipedia
Trang 13ix
DANH M C CÁC HÌNH
Hình 2-1 Công c h tr tìm l i v i giao di n đ h a 7
Hình 3-1 Giao ti p gi a giao di n đ h a và trình g l i 14
Hình 3-2 Thành ph n giao ti p gdb và gdb thông qua giao ti p máy 16
Hình 3-3 Nh p xu t đ ng b [10] 18
Hình 3-4 Nh p xu t b t đ ng b [10] 18
Hình 3-5 Giao ti p gi a MISession và gdb (Eclipse) [20] 26
Hình 3-6 Giao ti p gi a Giao di n – Debug Model – Target [19] 27
Hình 3-7 S đ l p Debug Model (Eclipse) [19] 28
Hình 4-1 T ng quan công c h tr tìm l i trên môi tr ng web 30
Hình 4-2 T ng quan ki n trúc h th ng 32
Hình 4-3 EventEmitter 33
Hình 4-4 Các thành ph n phía máy ch web 35
Hình 4-5 S đ l p m c chi ti t các thành ph n phía máy ch web 36
Hình 4-6 S đ tu n t quá trình x lý l nh và tr v k t qu 39
Hình 4-7 Các thành ph n phía trình duy t 42
Hình 4-8 S đ l p m c chi ti t các thành ph n phía trình duy t 44
Hình 4-9 S đ tu n t giao ti p l nh gi a Trình duy t – Máy ch – Gdb 48
Hình 4-10 S đ tu n t quá trình th c thi v i đ i t ng Stackframe 49
Hình 4-11 S đ tu n t quá trình th c thi v i thread 50
Hình 4-12 S đ tu n t quá trình c p nh t giá tr bi n 51
Hình 4-13 Máy ch web d ng middleware 53
Hình 4-14 Liên k t gi a Model và View 58
Hình 4-15 Thi t k giao di n công c 58
Hình 4-16 S ki n ng i dùng thay đ i ng c nh th c thi 59
Hình 5-1 Các thành ph n phân h máy ch 61
Hình 5-2 Các thành ph n phân h trình duy t 64
Hình 5-3 Giao di n công c 68
Hình 5-4 Qu n lý th m c và t p tin 69
Trang 14x
Hình 5-5 Cây th c thi 69
Hình 5-6 Qu n lý breakpoint 69
Hình 5-7 Thanh công c 70
Hình 5-8 Thông tin bi n và bi u th c 70
Hình 5-9 Biên d ch d án 70
Hình 5-10 Nh p xu t chu n 70
Hình 5-11 So n th o mã ngu n 70
Hình 5-12 Giao di n trang gi i thi u th nghi m công c 71
Hình 5-13 Giao di n công c trên máy tính b ng iPad 73
Trang 15xi
DANH M C CÁC B NG
B ng 2-1 M t s môi tr ng phát tri n tích h p trên web 10
B ng 3-1 M t s trình g l i ph bi n cho C/C++ 12
B ng 3-2 So sánh lldb và gdb 15
B ng 4-1 Vai trò c a trình duy t và máy ch 31
B ng 4-2 S l c giao ti p l nh gi a trình duy t – máy ch 55
B ng 4-3 Danh sách các l nh 56
B ng 4-4 Các s ki n th c thi 57
B ng 5-1 K t qu th nghi m 72
B ng 6-1 B ng so sánh m c tiêu ban đ u và k t qu đ t đ c 75
Trang 16xii
TÓM T T KHÓA LU N
V i s ph bi n c a đi n toán đám mây, các ng d ng trên desktop đang d n
đ c thay th m t ph n b i các ng d ng web Môi tr ng phát tri n tích h p trên web đang có nh ng b c đ u phát tri n, khóa lu n t t nghi p c a hai sinh viên khóa
2007, ng Hoàng H i và Tr n Thanh H i đã đ a ra ki n trúc c b n c a môi
tr ng phát tri n tích h p d a trên n n t ng web: biên t p mã ngu n, biên d ch và
th c thi
Trong ph m vi c a khóa lu n, chúng em s xây d ng công c trên web có
kh n ng h tr tìm l i – m t trong nh ng thành ph n thi t y u c a m t môi tr ng phát tri n tích h p, giúp cho quá trình phát hi n và s a l i trong ng d ng d dàng
h n M i ngôn ng l p trình có m t s đ c thù riêng nên công c đ c xây d ng trong khóa lu n này t p trung h tr ng d ng vi t b ng ngôn ng C/C++
th c hi n khóa lu n, chúng em th c hi n kh o sát các trình g l i, công
c h tr tìm l i c a môi tr ng phát tri n tích h p h tr C/C++, th nghi m tính
kh thi c a công c trên n n t ng web b ng các k thu t web th i gian th c, đ a ra
mô hình và cài đ t công c trên web h tr tìm l i ng d ng C/C++
N i dung c a khóa lu n bao g m 6 ch ng:
Trang 17mp3.zing.vn), l u tr và chia s t p tin… k t h p v i đi n toán đám mây [1], các
ng d ng tr c tuy n ngày càng đa d ng h n D i đây là nh ng u đi m c a ng
d ng d a trên n n t ng web so v i môi tr ng desktop truy n th ng:
Không ph i cài đ t: H u h t các thi t b hi n nay đ u cài đ t m c đ nh ít nh t
m t trình duy t web, do đó khi tri n khai không c n ph i cài đ t thêm b t k
ph n m m nào khác Các thi t b bao g m: máy tính cá nhân, máy tính xách tay, máy tính b ng, đi n tho i thông minh có h tr k t n i Internet;
Gi m chi phí tri n khai h th ng: Các thi t b trong h th ng ch c n có k t
n i m ng đ n máy ch , gi m đ c chi phí b n quy n cho các ng d ng trên
t ng máy đ n do có th t n d ng các ph n m m (trình duy t, h đi u hành)
Trang 182
Trong l nh v c gia công và s n xu t ph n m m, các công c h tr quá trình phát tri n ph n m m, bao g m môi tr ng phát tri n tích h p trên web c ng đang
có s d ch chuy n t ng t Khóa lu n t t nghi p ng Hoàng H i và Tr n Thanh
H i đã xây d ng công c cho phép: so n th o, biên d ch và th c thi ng d ng Các công c phát tri n ph n m m d a trên n n t ng web đang trong giai đo n xây d ng cung c p m t s ch c n ng c b n
1.2 Môi tr ng phát tri n tích h p trên web
B c đ u các nhà phát tri n đã đ a vào ho t đ ng nh ng môi tr ng phát tri n tích h p trên web nh : Cloud91, CodeRun2, eXo Cloud IDE3… Ngoài ra còn
có nh ng công c riêng l nh Ideone4 hay Eclipse đang phát tri n Orion5 trong giai
đo n v n m, tr c m t ch h tr qu n lý t p tin và qu n lý phiên b n mã ngu n
Khóa lu n t t nghi p c a hai sinh viên ng Hoàng H i và Tr n Thanh H i
[2] đã xây d ng ng d ng minh h a cho m t môi tr ng phát tri n ng d ng C/C++
v i các tính n ng: qu n lý t p tin, biên t p mã ngu n, h tr trang trí mã ngu n, xây
d ng cây bi u t ng, biên d ch và th c thi ng d ng v i tham s dòng l nh cho
tr c Nghiên c u này đ xu t xây d ng m t môi tr ng phát tri n tích h p trên web ph c v cho vi c h c t p và gi ng d y l p trình trong môi tr ng đ i h c
1.3 M c tiêu nghiên c u
Các thành ph n chính c a môi tr ng phát tri n tích h p bao g m: trình so n
th o mã ngu n, trình biên d ch (ho c thông d ch) và công c h tr tìm l i Ch c
n ng h tr tìm l i r t c n thi t trong quá trình phát tri n ph n m m, h tr l p trình viên xác đ nh và x lý l i d dàng h n Do đó, chúng em quy t đ nh nghiên c u đ tài xây d ng công c h tr tìm l i cho ng d ng C/C++ trên môi tr ng web M c tiêu c a đ tài bao g m:
Trang 193
Kh o sát tính n ng và n n t ng c a các công c h tr tìm l i ng d ng C/C++ trên môi truy n desktop và web;
Xây d ng mô hình c a công c h tr tìm l i trên web d a trên nghiên c u
Công c h tr tìm l i trong các môi tr ng phát tri n ng d ng trên web đã
có bao g m: Cloud9, CodeRun và eXo Cloud IDE;
N n t ng phát tri n ng d ng web th i gian th c Node.js;
Áp d ng các m t s m u thi t k truy n th ng trong ngôn ng l p trình k ch
b n JavaScript
1.5 Ph m vi đ tài
Chúng em t p trung kh o sát các tính n ng và xây d ng mô hình cho công
c trên web h tr tìm l i cho ngôn ng l p trình C/C++ Công c xây d ng đ c các tính n ng c b n c a công c h tr tìm l i bao g m:
Thêm/xóa breakpoint trên mã ngu n, cho phép d ng t i nh ng dòng mã ngu n xác đ nh tr c;
Th c thi theo t ng dòng trên mã ngu n;
Kh o sát các bi n khi ng d ng đang t m d ng
D a vào mô hình nghiên c u đ c chúng em s xây d ng ng d ng minh
h a đ th nghi m mô hình này Nh ng ch c n ng nâng cao nh : kh o sát t ng thread, kh o sát toàn b quá trình th c thi… s đ c phát tri n trong các nghiên c u sau này
Trang 20trong ng d ng có thu t ng ti ng Anh là “debugging”,b t ngu n t vi c g con
côn trùng (bug) ra kh i máy tính [3] B t đ u t nh ng n m 1950, thu t ng này b t
đ u đ c s d ng trong khoa khoa h c máy tính b i ACM ây là quá trình có
ho c xu t giá tr các bi n trên mã ngu n ch ng trình M i khi phát sinh nhu c u
kh o sát khác thì ph i thêm/xóa nh ng đo n mã xu t giá tr , sau đó ph i th c hi n
l i t đ u quá trình biên d ch và th c thi Bên c nh đó, vi c theo dõi nh ng bi n có
c u trúc ph c t p gây r t nhi u khó kh n cho l p trình viên Vì v y, ph ng pháp này ch có th đ c s d ng v i nh ng ng d ng đ n gi n
V i ph n l n ngôn ng l p trình, quá trình này có th đ c th c hi n v i s
tr giúp v i m t ph n m m g i là debugger, thu t ng ti ng Vi t có th g i là trình
b y l i ho c trình g l i Trình g l i cho phép l p trình viên ki m soát, theo dõi quá trình th c thi c a ch ng trình, t m d ng, ti p t c, đ t breakpoint, theo dõi và thay đ i giá tr c a b nh V i s h tr c a trình g l i, quá trình phát hi n và x
lý l i đ c th c hi n hi u qu h n: không c n thi t ph i biên d ch l i mã ngu n khi thay đ i nh ng m c tiêu kh o sát, th m chí m t s trình g l i còn cho phép s a – biên d ch – ti p t c th c thi6 ngay l p t c mà không c n ph i kh i đ ng l i quá
6 Edit and continue http://msdn.microsoft.com/en-us/library/bcew296c(v=vs.110).aspx
Trang 215
trình Trình g l i là m t công c cho phép l p trình viên theo dõi, cô l p và lo i b
l i kh i ph n m m [4] Th c t , trình g l i làm rõ quá trình th c thi c a ph n m m
– cho phép l p trình viên tìm hi u quá trình th c thi, s a các khi m khuy t trong
ph n m m Bên c nh đó, trình g l i có th đ c dùng ghi nh n l i toàn b quá trình th c thi nh m kh o sát và đánh giá t ng quát Các ch ng trình c n đ c biên
d ch v i ch đ g l i
Quá trình s d ng trình g l i thông th ng đ c th c hi n theo các b c:
B c 1: t các tham s ban đ u bao g m: breakpoint, thông tin các t p
Trình g l i có th chia làm hai m c đ : M c mã máy (machine-level) và
m c mã ngu n (source-level) M c đ mã máy ch cho phép đi u khi n quá trình
th c trên mã máy; m c đ mã ngu n cho phép ánh x ng c gi a v trí đo n mã ngu n và mã máy c a c a ng d ng Trong ph m vi khóa lu n ch đ c p đ n trình
g l i m c mã ngu n Công c h tr tìm l i c a môi tr ng phát tri n tích h p s
d ng trình g l i đ cung c p ch c n ng h tr tìm l i
Các công c h tr tìm l i đ c liên k t v i thành ph n so n th o mã ngu n
đ th hi n v trí th c thi hi n t i m t cách tr c quan v i ng i dùng Bên c nh đó
Trang 226
vi c theo dõi giá tr các bi n d ng c u trúc ph c t p d dàng h n v i nh ng thao tác
t ng tác trên môi tr ng đ h a, gi m b t s l p l i các thao tác nhàm chán Các trình g l i có giao ti p dòng l nh đ c nhi u l p trình viên s d ng đ th c hi n thao tác tìm l i Tuy nhiên, v i ph n l n l p trình viên công vi c này d dàng h n
v i giao di n đ h a mà môi tr ng phát tri n tích h p cung c p cho h
M t ngôn ng l p trình có th có nhi u môi tr ng phát tri n tích h p nh ng
ch có m t s trình g l i đ c s d ng Ví d : C/C++ v i gdb đ c s d ng nh
m t trình g l i cung c p ch c n ng h tr tìm l i cho các môi tr ng phát tri n tích h p ph bi n nh : Eclipse, Netbeans, XCode (đ n phiên b n 4.2), QtCreator, CodeBlocks… M t khác các môi tr ng tích h p dù h tr nhi u h n m t ngôn ng
l p trình nh ng thành ph n giao di n ng i dùng đ c s d ng chung cho nhi u ngôn ng và trình g l i V i m t s ít môi tr ng phát tri n tích h p th ng m i
c hai thành ph n này đ c tích h p ngay trong môi tr ng phát tri n Do đó, vi c tái s d ng các thành ph n này có nhi u khó kh n do không có các tài li u chính
th c c ng nh v n đ b n quy n
Trang 237
Hình 2-1 Công c h tr tìm l i v i giao di n đ h a
t o thành công c h tr tìm l i trong môi tr ng phát tri n tích h p là s
k t h p c a hai thành ph n Trong đó trình g l i th ng đ c l p v i môi tr ng phát tri n tích h p, có kh n ng thay th đ c T ng môi tr ng phát tri n tích h p
ph c v cho nh ng m c đích khác nhau tuy nhiên d a trên nh ng thành ph n chung, do đó trình g l i có th đ c dùng l i nguyên b n ho c ch nh s a phù h p
Các trình g l i th ng đ c cung c p nh m t thành ph n cho b công c phát tri n ph n m m c a m t ngôn ng l p trình, h u h t các môi tr ng phát tri n tích h p đ u s d ng l i thành ph n này tr khi có nh ng nhu c u mà công c có
s n không th đáp ng đ c, c n c i ti n ho c thay th trình g l i khác V i h u
h t các ngôn ng ph bi n đ u có các trình g l i d ng dòng l nh ho c giao di n l p trình: Java v i jdb (OpenJDK), C# v i mdb (mono), C/C++ v i gdb (gcc) ho c lldb (llvm)… Vi c tích h p c a trình g l i và giao di n đ h a c a m t môi tr ng phát tri n tích h p c ng c n đ c cân nh c đ n s cho phép gi y phép mã ngu n m
M t s gi y phép không có yêu c u v gi y phép c a ch ng trình dùng (MIT,
IDE
Hello [Debug]
View Edit File Tools Help
hello() at foo.c:10 Thread 1 (stopped) Target
main () at main.c:20 Thread 2 (stopped)
Breakpoints Debug
File
print_str() at bar.c:15 t_create() in t.so
bar.c main.c foo.c
n (int): 16
m (int): 26
Run Stop
1 3 5 7 9 10
#include <stdio.h>
int foo() { int n, m;
Trang 248
BSD, Apache…), m t s khác (GPL) yêu c u ph n m m có liên k t mã ngu n ph i
đ c phát hành v i cùng m t gi y phép, nh ng thay đ i mã ngu n ph i đ c cung
c p công khai N u s d ng giao di n l p trình c a m t trình g l i v i gi y phép copyleft đ ng ngh a v i môi tr ng phát tri n tích h p c ng ph i đ c phát hành
v i gi y phép c a trình g l i Ràng bu c này h n ch s phát tri n c a các s n
ph m th ng m i có s d ng nh ng thành ph n mã ngu n m copyleft M t s
ch ng trình nh gdb đ c phát hành v i gi y phép GPL, th c t v n đ c s d ng trong các s n ph m th ng m i nh vào giao ti p d a trên nh p xu t chu n, nh ng
Socket: Giao ti p thông qua môi tr ng m ng;
Giao ti p máy thông qua nh p xu t chu n (MI): t ng t giao ti p v i
ng i dùng qua dòng l nh v i đ nh d ng giao ti p chu i có th chuy n
đ i d dàng thành d li u có c u trúc đ tích h p vào các ng d ng Môi tr ng phát tri n tích h p g m thành ph n đ giao ti p v i trình g l i
và các thành ph n giao di n, th c hi n vi c chuy n đ i gi a thông tin nh n đ c t trình g l i th hi n các thông tin d i d ng giao di n đ h a và ng c l i, chuy n các thao tác trên giao đ h a c a ng i dùng thành các l nh đ trình g l i th c thi
2.3 Công c trên web h tr tìm l i
Cho đ n th i đi m hi n t i, th c hi n kh o sát quá trình th c thi c a ng
d ng vi t b ng ngôn ng C/C++ ngay t i trình duy t g p r t nhi u khó kh n do gi i
h n c a trình duy t Vi c th c thi ph i đ c th c hi n phía máy ch , trình duy t
có vai trò giao ti p v i máy ch , hi n th giao di n và t ng tác v i ng i dùng
C ng nh h u h t môi tr ng phát tri n tích h p truy n th ng, phía máy ch có
Trang 259
thành ph n là trình g l i đ đi u khi n quá trình th c thi ch ng trình ng i dùng, máy ch web đóng vai trò là trung gian chuy n ti p thông tin gi a trình duy t và trình g l i
Xây d ng môi tr ng phát tri n tích h p trên web c b n d a trên nh ng thành ph n, ki n trúc đã có trên môi tr ng truy n th ng Các thành ph n c n đ c xác đ nh l i v trí, vai trò c hai phía máy ch và trình duy t d a trên ch c n ng
c a thành ph n đó c ng nh cân nh c kh n ng b o m t và hi u n ng c a h th ng Xác đ nh các thành ph n có th tái s d ng t nh ng công c đã có, sau đó thay đ i
đ thích h p v i môi tr ng phát tri n tích h p trên web Bên c nh đó giao th c,
đ nh d ng thông tin trao đ i trình g l i – máy ch web – trình duy t c n đ c xây
d ng
Quá trình s d ng công c h tr tìm l i là m t quá trình yêu c u ph i có s trao đ i liên t c gi a giao di n – máy ch – trình g l i ây không là v n đ đ i
v i môi tr ng desktop truy n th ng, các ti n trình có kh n ng trao đ i tr c ti p
v i nhau Khi chuy n đôi qua môi tr ng web, đây là m t v n đ c n ph i gi i quy t c hai khía c nh: tính kh thi và đ m b o hi u n ng
ng d ng web là nh ng trang HTML đ c t i qua giao th c HTTP sau đó
hi n th trên trình duy t M i yêu c u đ u b t đ u t phía trình duy t nên máy ch không th ch đ ng chuy n thông báo cho trình duy t theo th i gian th c Trong
nh ng n m g n đây m t s k thu t và công ngh đã xu t hi n đ kh c ph c nh c
đi m này c a giao th c HTTP nh : polling, long-polling, WebSocket… tuy nhiên
nh ng gi i pháp này đòi h i s thay đ i v ki n trúc c ng nh cách v n hành c a máy ch web
M t khác vi c s d ng m t k t n i th i gian th c, ph c v nhi u ng i dùng trên Internet ph i đ m đ tin c y và hi u n ng c a h th ng phía máy ch Ch c
n ng h tr tìm l i đ c đi u khi n t trình duy t, v i m i phiên làm vi c c a
ng i dùng phía máy ch ph i có nh ng ti n trình nh : ch ng trình ng i dùng, trình g l i và m t s ti n trình khác Máy ch web làm công vi c chuy n ti p thông tin gi a trình duy t và các ti n trình phía máy ch , do đó máy ch web ph i
Trang 2610
th c hi n r t nhi u thao tác nh p xu t đ liên l c v i các thành ph n S d ng gi i pháp đa lu ng không th đáp ng đ c nhu c u c a m t s l ng l n ng i dùng
do gi i h n v b nh , c ng nh hi n t ng CPU chuy n đ i qua l i gi a quá nhi u
thread d n đ n h th ng b treo [5] Máy ch web ph c v ch c n ng h tr tìm l i
là thành ph n nh n và chuy n ti p thông tin đ n các trình duy t ho c các ti n trình, ngh a là các thao tác nh p xu t h n nhi u h n r t nhi u so v i x lý tính toán M t trong nh ng d ng thao tác nh p xu t phù h p v i d ng ng d ng này là nh p xu t
b t đ ng b : khi th c hi n các thao tác nh p xu t, ti n trình không ph i ch đ h
th ng th c hi n xong vi c đ c/ghi d li u v n có th th c hi n các x lý khác, không c n thi t ph i t o ra nh ng thread đ giao ti p v i t ng thành ph n Cách ti p
c n này gi i quy t m t cách hi u qu v n đ hi u n ng khi xây d ng công c h tr tìm l i
Thông tin v m t s môi tr ng phát tri n tích h p trên web có ch c n ng h
tr tìm l i:
eXo Cloud IDE eXo Platform SAS Java
B ng 2-1 M t s môi tr ng phát tri n tích h p trên web ch c n ng h tr tìm l i
Trong r t nhi u các môi tr ng phát tri n tích h p trên web, trên đây là
nh ng môi tr ng phát tri n tích h p có h tr ch c n ng h tr tìm l i Vi c xây
d ng ch c n ng h tr tìm l i cho môi tr ng phát tri n tích h p trên web là h ng phát tri n trong t ng lai Qua tìm hi u, các môi tr ng nói trên đ u có m t đi m chung đ c xây d ng trên chính n n t ng ngôn ng đ c h tr : Cloud9 v i Node.js (JavaScript), CodeRun v i NET (C#), eXo Cloud IDE v i JVM (Java); có
s liên k t nh t đ nh gi a n n t ng và ngôn ng h tr
Cloud9 d a trên cách ti p nh p xu t b t đ ng b đ gi i quy t v n đ
hi u n ng c a h th ng, tuy nhiên s n ph m này ch h tr JavaScript, toàn b h th ng ch dùng đ ph c v cho vi c phát tri n ng d ng web
Trang 2711
b ng JavaScript Do đó, v n ch a đáp ng đ c nhu c u c a h c t p c ng
nh làm vi c v i ngôn ng l p trình ph bi n hi n nay nh C/C++;
CodeRun và eXo là các s n ph m th ng m i nên chúng em không th
ti p c n đ c mã ngu n và thi t k h th ng c a nh ng s n ph m này Tuy nhiên qua kh o sát v ho t đ ng, c hai h th ng này đ u dùng k thu t polling (tham kh o ph l c), t c g i yêu c u đ n máy ch theo chu
k xác đ nh đ nh n nh ng thông tin ho c c p nh t m i tr c a thao tác có th làm ng i dùng khó ch u, gây quá t i cho máy ch web khi có
r t nhi u yêu c u đ c g i t trình duy t đ n máy ch theo m t chu k
nh t đ nh gây lãng phí tài nguyên h th ng và có th “c ng h ng” làm treo toàn b h th ng
T nh ng kh o sát nêu trên trong ph m vi đ tài c a khóa lu n t t nghi p chúng em s t p trung nghiên c u vào nh ng v n đ sau:
Các trình g l i h tr ng d ng vi t b ng ngôn ng C/C++;
K thu t nh p xu t b t đ ng b k t h p l p trình h ng s ki n;
K thu t web th i gian th c;
K thu t xây d ng ng d ng web đ n trang t ng thích v i các trình duy t và thi t b khác nhau;
Xây d ng s n ph m minh h a h tr tìm l i ng d ng C/C++ trên môi
tr ng web
Trang 28th ng nhúng Trong ph m vi c a khóa lu n t t nghi p chúng em t p trung nghiên
c u n n t ng C/C++ trên desktop, do đó nh ng trình g l i C/C++ cho các n n t ng
đ c tr ng nh h th ng nhúng ho c các thi t b di đ ng không đ c nghiên c u
B ng sau đây li t kê nh ng trình g l i C/C++ ph bi n:
Fortran, Java
BSD
Objective-C, Free Pascal, Fortran, Java
C, C++, Objective-C
University of Illinois/NCSA Open Source License
Visual Studio
Debugger
Visual Studio
Trang 2913
hay tích h p v i công c h tr tìm l i c a môi tr ng phát tri n tích h p Bên c nh
đó, gdb là công c có s n trên h u h t các b n phân ph i Linux c ng nh là công c
đ phát tri n nhân Linux, ngoài ra gdb c ng đ c h tr trên nhi u n n t ng khác nhau k c Microsoft Windows Các môi tr ng phát tri n tích h p h tr C/C++
ph bi n nh Eclipse, Netbeans và XCode s d ng gdb đ cung c p ch c n ng h
tr tìm l i
Tuy nhiên b t đ u t phiên b n 4.3 Xcode, Apple đã thay gdb b ng lldb, trình g l i c a b công c llvm (t ng t gcc), đ c phát hành v i gi y phép mã ngu n m không copyleft, do đó Apple có th d dàng tích h p vào XCode và s
d ng API đ giao ti p trình g l i này Trình g l i lldb cung c p m t giao di n l p trình h ng đ i t ng d dàng truy xu t và th c hi n thao tác trên các đ i t ng, trong khi đó gdb v i giao ti p máy v i d ng dòng l nh khi giao ti p c n ph i chuy n đ i qua l i gi a mô hình c a môi tr ng phát tri n tích h p và gdb
Visual Studio ph bi n cùng v i h đi u hành Windows v i giao di n thân thi n, d s d ng v i h u h t m i ng i Tuy nhiên thành ph n trình g l i c a Visual Studio đ c tích h p ch t ch trong môi tr ng phát tri n tích h p c ng nh đây là m t s n ph m th ng m i
Intel idb ch ch y u đ c s d ng trong l p trình song song; dbx đ c s
d ng trong nh ng n n t ng ít ph bi n h n nh IBM z/OS và Oracle Solaris
Sau khi th c hi n kh o sát các trình g l i cung c p cho l p trình viên nh ng
Trang 30hi n trình g l i tr v k t qu đã th c thi Song song v i quá trình trên, các s ki n
x y ra trong quá trình tìm l i s đ c thông báo ng c l i (t o thread, tình tr ng đang ch y ho c d ng…) V m t k thu t c n có kênh giao ti p hai chi u (full-duplex) đ k t n i hai thành ph n này
Các công c h tr tìm l i và trình g l i s d ng giao di n đ h a (Visual Studio) ho c dòng l nh (gdb, lldb, dbx) đ giao ti p v i ng i dùng M t s cung
c p c hai lo i giao di n (idb) Tuy nhiên đ có th k t h p v i môi tr ng phát tri n tích h p m i trình g l i c n có giao ti p máy có th hi u đ c nh : giao di n
l p trình (API), giao ti p máy qua dòng l nh (MI) ho c giao ti p thông qua m ng:
API: lldb;
MI: gdb;
Socket: gdbserver – phiên b n h tr tìm l i t xa c a gdb giao ti p thông qua c ng tu n t ho c TCP
Trang 31ph c v t t h n cho c quá trình phát tri n ph n m m Tuy nhiên llvm đang trong quá trình phát tri n và ch m i xu t hi n nh m ph c v cho vi c phát tri n ng d ng trên Mac OS và iOS, vi c h tr các n n t ng khác v n đang đ c phát tri n Do đó
tr c m t gdb v n là l a ch n t t trong kho ng th i gian t i cho đ n khi lldb đ c phát tri n hoàn thi n
gdb cung c p hai lo i giao ti p: giao ti p v i ng i dùng thông th ng và giao ti p máy C hai lo i giao ti p này đ u đ c th c hi n thông qua nh p xu t chu n Giao ti p máy c a gdb c ng tuân theo nguyên t c c b n c a trình g l i:
nh n l nh, tr v k t qu th c hi n l nh và thông báo s ki n
Trang 32Hình 3-2 Thành ph n giao ti p gdb và gdb thông qua giao ti p máy
L nh gdb bao g m: tên l nh và các tham s ngoài ra còn có th kèm theo th bài (token) nh m đ i chi u l nh chuy n cho gdb và k t qu tr v K t qu th c hi n
l nh và thông báo s ki n có d ng chu i có c u trúc, có th chuy n đ i thành d
li u mà máy tính c a th thao tác đ c m t cách d dàng Ki u d li u này h tr
d li u d ng chu i, danh sách và b Sau khi chuy n đ i thành d li u các c u trúc, thông tin này đ c chuy n cho các thành ph n x lý và giao di n
Thành ph n giao ti p v i gdb ph i giao ti p đ c v i gdb thông qua giao
di n dòng l nh, bên c nh đó th c hi n các x lý khác nh chuy n đ i t d ng chu i thành d ng d li u c u trúc, cho phép các thành ph n khác l ng nghe ho c g i các thao tác x lý khi có s ki n nh n đ c t gdb nh d ng l nh nh p và chu i xu t
c a gdb v i giao ti p máy đ c trình bày trong tài li u k thu t c a gdb [7] Vi c
chuy n đ i chu i giao ti p máy thành d li u có c u trúc đ c th c hi n b ng cách
x lý tr c ti p trên chu i ho c tái s d ng l i thành ph n này trong các môi tr ng phát tri n tích h p mã ngu n m nh Eclipse, Netbeans
3.2 K thu t nh p xu t b t đ ng b
Trong m t h th ng máy tính nói chung các thao tác có th đ c chia làm hai
lo i: x lý (CPU, GPU) và nh p xu t Các thao tác nh p xu t bao g m đ c/ghi d
li u trên: b đ m CPU (Cache L1/L2/L3), RAM, đ a c ng, m ng… Nh ng thao tác trên cache, RAM có đ tr , th i gian th c hi n và m c đ l i r t nh n u so sánh
v i đ a c ng và m ng thì chi phí g n nh không đáng k Th i gian truy xu t đ a
c ng và sau đó đ n m ng ch m nh t trong các thao tác nh p xu t [8]:
L1: 3 chu k ;
L2: 14 chu k ;
RAM: 250 chu k ;
Trang 33b nh p xu t truy n th ng, thao tác nh p xu t s khóa (block) ti n trình cho đ n khi
k t qu đ c tr v V n đ này đ c gi i quy t b ng cách s d ng các thread khác nhau, tuy nhiên cách ti p c n này d n đ n nh ng v n đ phát sinh khác:
Qu n lý truy xu t đ ng th i;
Hi n t ng starvation c a CPU khi có m t s l ng l n thread đ c t o ra:
th i gian đ thay đ i ng c nh gi a các thread nhi u h n th i gian CPU th c
Bên c nh thao tác nh p xu t đ ng b truy n th ng, nh ng thao nh p xu t b t
đ ng b tr v ngay l p t c do đó không ng n vi c x lý c a ti n trình, thay vào đó cho yêu c u thêm m t tham s là hàm g i ng c (callback), hàm này s đ c g i khi thao tác nh p xu t đã th c hi n xong đ x lý d li u nh n đ c t thao tác
nh p xu t [10] Các l i ích thao tác nh p xu t b t đ ng b mang l i:
Không c n thi t ph i t o thêm thread đ x lý các thao tác nh p xu t;
Gi m l ng tài nguyên RAM, CPU cho vi c chuy n đ i gi a các thread;
Trang 3418
Không ph i gi i quy t v n đ truy xu t đ ng th i trên d li u có c u trúc
do vi c s d ng thread đ không làm treo khi th c hi n thao tác nh p
xu t;
m b o h th ng có th gi nhi u k t n i nh p xu t m t cách d dàng Tuy nhiên cách ti p c n này làm cho ti n trình x lý trên mã ngu n không t nhiên, c ng nh thay đ i cách x lý l i (ngo i l ) c ng nh không th ti p t c s
d ng nh ng th vi n v n đ c xây d ng v i nh p xu t đ ng b So sánh gi a hai
mô hình b ng s đ tu n t :
Hình 3-3 Nh p xu t đ ng b [10]
Hình 3-4 Nh p xu t b t đ ng b [10]
Trang 35m t th i gian không nh , n u s d ng các thao tác đ ng b đ giao ti p s tiêu hao
r t nhi u tài nguyên h th ng cho vi c ch trong khi v i mô hình b t đ ng b , không c n ph i t o ra nh ng thread đ giao ti p nh ng v n có th th c hi n các thao tác x lý khác n u có (bao g m: ph c v k t n i, x lý v i nh ng ng i dùng khác đang có trao đ i d li u…) ph c v m t ng i dùng máy ch web c n ít nh t
m t k t n i v i trình duy t, m t k t n i v i gdb, vai trò c a máy ch web nh đã trình bày ch đóng vai trò chuy n ti p thông tin gi a 2 thành ph n, máy ch web x
lý (chuy n đ i đ nh d ng) trên d li u r t ít T đó nh n th y đ c đây là mô hình phù h p đ xây d ng công c trên web h tr tìm l i ng d ng C/C++ nói riêng và
các ngôn ng khác nói chung Cách ti p c n này Cloud9 [11] c ng đ c s d ng đ
cung c p ch c n ng h tr tìm l i v i JavaScript
3.3 JavaScript
JavaScript là m t ngôn ng l p trình cho phép xây d ng ng d ng phía trình duy t web Ngoài JavaScript còn có m t s ngôn ng l p trình khác cho phép xây
d ng ng d ng trên trình duy t nh : VBScript (Internet Explorer) hay Dart (đang
đ c Google phát tri n cho trình duy t Chrome) Khác v i nh ng môi tr ng trên desktop, JavaScript là ngôn ng duy nh t đ c h tr trên các trình duy t khác nhau, do đó đ ng d ng vi t b ng m t ngôn ng khác JavaScript có th ho t đ ng
đ c trên các trình duy t khác nhau, mã ngu n c n đ c chuy n-d ch (transcompile) thành JavaScript Cách ti p c n này đ c s d ng b i Dart và CoffeeScript (xem thêm v CoffeeScript trong ph n ph l c)
Trang 3620
C ng nh các nhi u ngôn ng khác JavaScript có d ng cú pháp t ng t C, JavaScript trong trình duy t web cung c p giao ti p l p trình v i các đ i t ng DOM cho phép xây d ng các ng d ng có kh n ng t ng tác v i ng i dùng
thông qua các s ki n trên giao di n [12] V i s ra đ i c a đ i t ng XMLHttpRequest, JavaScript đã t o ra m t b c chuy n mình l n [13] v i s xu t
hi n đ u tiên c a nh ng ng d ng nh Gmail s d ng m t trang duy nh t cho toàn
b ng d ng, m i thao tác c p nh t d li u đ u đ c th c hi n phía sau nh đ i
t ng XMLHttpRequest
JavaScript đ c xem nh ngôn ng c a web [14], nh s c nh tranh c a các
trình duy t web nh ng c máy th c thi JavaScript (JavaScript engine) đ c c i ti n nhanh chóng, JavaScript ti n thêm m t b c khi b c ra kh i trình duy t v i nh ng
d án nh Node.js [13] cho phép xây d ng nh ng máy ch web h ng s ki n ph c
v cho nh ng ng d ng web th i gian th c
Ngoài ra JavaScript c ng là ngôn ng l p trình ng d ng b n ng (native) cho m t s h đi u hành nh WebOS và Windows 87 S phát tri n m nh m c a các ng d ng web v i s h tr c a JavaScript đã xóa nhòa biên gi i gi a ng d ng
b n ng và ng d ng web trên c môi tr ng desktop l n di đ ng 8
3.4 Web th i gian th c
Các ng d ng web ngày càng phát tri n nh ng ch c n ng nh m đem l i
nh ng tr i nghi m t t h n cho ng i dùng T nh ng trang web s khai ban đ u, các trang web đã tr thành nh ng ng d ng th t s có nh ng b c đi thay th
nh ng ng d ng truy n th ng trên máy tính v i tính kh chuy n, không c n cài đ t
c ng nh làm vi c m i lúc m i n i, trên m i thi t b t máy tính cá nhân, máy tính
b ng, đi n tho i thông minh ch v i k t n i 3G/LTE đáp ng cho nhu c u ngày càng cao c a ng i s d ng các nhà phát tri n đã xây d ng các tính n ng nh m mang l i tr i nghi m t t h n cho ng i dùng trong đó quan tr ng nh t là kh n ng
t ng tác th i gian th c v i máy ch web, thông qua đó có th t ng tác th i gian
7 ng d ng metro http://msdn.microsoft.com/en-us/library/windows/apps/br211385.aspx
8 Abode PhoneGap http://phonegap.com/
Trang 3721
th c tr c ti p v i nh ng ng i dùng khác c ng nh làm vi c c ng tác đi n hình là Facebook, Gmail, Google Docs Các s ki n c p nh t g n nh ngay l p t c đ c chuy n đ n nh ng ng i dùng khác Giao th c HTTP là giao th c m t chi u, trong
đó ch có trình duy t có th ch đ ng chuy n d li u đ n máy ch , do đó v i k t n i HTTP đ n thu n máy ch web không th chuy n nh ng thông đi p c p nh t theo
th i gian th c đ n trình duy t xây d ng đ c nh ng ng d ng web th i gian
th c đòi h i nh ng k thu t c ng nh ki n trúc phía máy ch web đ c thay đ i đ đáp ng hi u n ng khi th c hi n giao ti p th i gian th c ph i gi r t nhi u k t n i
m ng đ đ m b o thông đi p đ c chuy n đ n các trình duy t v i đ tr th p nh t
Web th i gian th c không gi ng nh khái ni m tính toán th i gian th c trên máy tính Web th i gian th c là nh ng k thu t cho phép nh ng c p nh t t máy
ch web đ c chuy n g n nh ngay l p t c đ n trình duy t Gi i pháp cho v n đ là
t o ra m t d ng k t n i gi a máy ch web và trình duy t sao cho máy ch web có
th chuy n nh ng c p nh t c n thi t đ n trình duy t, sau đó trình duy t có th c p
nh t trên giao di n trang web nh ng thay đ i (n u có) Các nhà phát tri n đã đ ra
nh ng gi i pháp [15] (tham kh o thêm trong ph l c) bao g m: polling,
long-polling, WebSocket, FlashSocket, Server-send events…
Các công ngh ho c chu n h tr trên đ u mang l i k t n i th ng gian th c (ho c g n th i gian th c) gi a trình duy t và máy ch web Tuy nhiên b t c gi i pháp nào c ng yêu c u máy ch web đáp ng đ c k t n i liên t c m t khác đ m
b o các thông đi p có th chuy n đ n trình duy t theo th i gian (g n) th c Theo
s d li u đ nh n nh ng c p nh t là r t khó đ đáp ng đ c yêu c u này c ng nh
kh n ng cho phép ph c v nhi u ng i dùng
Trang 3822
M t cách ti p c n có th mang l i hi u qu t t h n là đ ng th i v i c p nh p
c s d li u, c p nh t đ c chuy n t ngu n (trình g l i) đ n nh ng ng i dùng khác thông qua kênh k t n i th i gian th c gi a trình duy t và máy ch web
ây chính là ti n đ c a s ra đ i c a nh ng máy ch web d ng h ng
h ng s ki n nh EventMachine, nginx, Node.js, Twisted, vert.x Khác v i nh ng máy ch web truy n th ng nh Apache – m i k t n i t trình duy t đ c x lý b ng
nh ng thread khác nhau, nh ng máy ch web này ch s d ng m t thread duy nh t
đ ti p nh n nh ng yêu c u t trình duy t, đ x lý nh ng yêu này máy ch web
th c hi n các thao tác nh p xu t b t đ ng b (t p tin, m ng, c s d li u…) sau đó
tr v k t qu cho trình duy t Do ch dùng m t thread đ ti p nh n các yêu c u,
nh ng máy ch web này có th ti p nh n m t s l ng r t l n k t n i HTTP đ ng
th i, v t qua gi i h n 10.000 [16] c a nh ng máy ch web s d ng thread đ x lý
nh ng yêu c u Các thao tác nh p xu t v n chi m nhi u th i gian ch đ u đ c
th c hi n d i d ng b t đ ng b nh p xu t, máy ch web không ph i ch nh ng thao tác này th c hi n xong v n ti p t c ti p nh n nh ng yêu c u khác Chi phí đ
gi các k t n i g n nh không đáng k , do đó cách ti p c n này gi i quy t hi u qu
v n đ thi t l p kênh k t n i th i gian th c gi a trình duy t – máy ch web Máy
ch web m t m t duy trì k t n i v i trình duy t m t khác có th chuy n nh ng c p
nh t t ng i dùng này đ n ng i dùng khác m t cách d dàng do s d ng c ch single-thread không ph i gi i quy t các v n đ truy xu t đ ng th i gi a các thread
x lý c a m i yêu c u
Mô hình theo h ng s ki n hoàn toàn phù h p đ xây d ng công c h tr tìm l i trên web:
Máy ch web đóng vai trò chuy n ti p thông tin gi a trình duy t – trình
g l i, các thông đi p đ c chuy n đi v i d ng s ki n k t h p v i b t
đ ng b nh p xu t;
Máy ch web không c n ph i truy v n liên t c đ có đ c c p nh t và chuy n đ n nh ng thành ph n khác, thay vào đó ch đ m nh n vai trò ti p
Trang 39 Ngoài ra b n thân l p trình theo h ng s ki n thích h p v i vi c l p trình giao di n phía trình duy t v i JavaScript và single-thread
L p trình h ng s ki n có th xem nh m t s m r ng c a m u thi t k Observer v i s k t h p c a thao tác nh p xu t b t đ ng b và các k thu t web
th i gian th c, kh n ng hi n th c hóa công c h tr tìm l i trên web v i kh n ng đáp ng cao và mang l i tr i nghi m g n nh các công c truy n th ng là hoàn toàn
kh thi V i s h tr web trên nhi u thi t b nh hi n nay, chúng ta có th hoàn toàn th c hi n vi c phát tri n ph n m m ngay trên nh ng thi t b nh máy tính b ng
ho c th m chí là đi n tho i thông minh m i lúc, m i n i, chuy n đ i d dàng gi a các thi t b này nh vào k t n i Internet và đi n toán đám mây
3.5 Node.js – Nh p xu t b t đ ng b và l p trình h ng s ki n
H u h t các ngôn ng l p trình đ u có th vi n chu n th c hi n các thao tác
nh p xu t đ đ c/ghi t p tin, m ng, thi t b chu n… các th vi n này đ u là d ng
đ ng b Bên c nh th vi n chu n có th có các b th vi n khác cho phép th c
hi n các thao tác nh p xu t b t đ ng b :
C/C++: libuv, boost::asio…
Java: Netty, New I/O, vert.x
JavaScript: Node.js, ringoJS, vert.x
Python: Twitsted
Ruby: EventMachine, vert.x
V i JavaScript là tr ng h p đ c bi t: JavaScript xu t phát là ngôn ng l p trình đ c s d ng đ b sung các ch c n ng cho các trong web đ c hi n th trong
Trang 4024
trình duy t, đ đ m b o v n đ b o m t cho ng i dùng JavaScript không đ c phép th c hi n các thao tác nh p xu t ngo i tr tr ng h p c a đ i t ng XMLHttpRequest dùng đ th c hi n m t yêu c u HTTP đ n máy ch trang đang
th c thi JavaScript trong trình duy t đ c th c thi single-thread do đó XMLHttpRequest ph i th c thi b t đ ng b , n u th c thi đ ng b trang web s b treo Các nhà phát tri n khi đ a JavaScript kh i trình duy t đã đ nh ngh a t t c các thao tác nh p xu t theo d ng b t đ ng b t ng t v i cách XMLHttpRequest th c thi, khác v i nh ng ngôn ng l p trình khác các thao tác b t đ ng b nh p xu t trên JavaScript đã tr thành chu n trong th c t (de facto) L p trình viên khi s d ng JavaScript không nh p nh ng gi a đ ng b và b t đ ng b khi th c hi n các thao tác nh p xu t
S k t h p v i JavaScript là m t ý t ng tình c c a Ryan Dahl – tác gi
Node.js [17] do JavaScript không có s n m t th vi n socket B ng s k t h p v i
c máy JavaScript c a trình duy t Google Chrome – V8, Ryan đã t o ra m t n n
t ng mã ngu n m k t h p gi a JavasScript, nh p xu t b t đ ng b và l p trình
h ng s ki n V i Node.js có th d dàng t o ra máy ch web có kh n ng gi
đ c m t s l ng r t l n k t n i ch v i vài dòng mã JavaScript Do đó Node.js
v t qua nh ng h n ch c a nh ng lo i máy ch web truy n th ng, cho phép chuy n t i nh ng c p nh t t i nh ng ng i dùng theo th i gian th c Node.js không
ph n này đã tr thành chu n cho JavaScript (ngoài trình duy t) h tr truy xu t các