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

Xây dựng ứng dụng Instant Message theo giao thức XMPP

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 (1.16 MB, 107 trang )

TRNG I HC M TP. H CHÍ MINH
KHOA CÔNG NGH THÔNG TIN

KHÓA LUN TT NGHIP
NGÀNH TIN HC



XÂY DNG NG DNG INSTANT
MESSAGE THEO GIAO THC XMPP



SVTH: Trn Trung Thành
MSSV: 10761278
Ngành: Tin Hc
GVHD: Thy Hunh Minh Quang




Thành ph H Chí Minh – Nm 2011
Báo cáo khóa lun tt nghip GVHD: Thy Hunh Minh Quang
SVTH: Trn Trung Thành i
LI CM N
Trong sut quá trình hc ti trng i hc M Tp H Chí Minh, em đã đc
các thy cô hng dn và truyn đt nhng kin thc chuyên môn cn thit.
Ngoài ra, em còn đc làm vic nghiêm túc, tích cc trên tinh thn đc lp sáng
to. ây là nhng kinh nghim quý báu trc khi bt tay vào làm vic trong
tng lai.
Quá trình thc hin khóa lun tt nghip va qua là c hi đ em có th áp


dng nhng kin th
c mà trong sut 4 nm qua em đã đc hc tp, cùng vi
hng dn tn tình ca thy Hunh Minh Quang em đã hoàn thành đ tài ca
mình.
Em xin chân thành cm n thy Hunh Minh Quang đã tn tình giúp đ,
hng dn em trong sut thi gian thc hin khóa lun, chúc thy sc khe và
đt đc nhiu thành công trong s nghip ging dy và nghiên cu khoa hc.
Sinh Viên
Trn Trung Thành

Báo cáo khóa lun tt nghip GVHD: Thy Hunh Minh Quang
SVTH: Trn Trung Thành ii
NHN XÉT CA GING VIÊN HNG DN
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………

………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………

Báo cáo khóa lun tt nghip GVHD: Thy Hunh Minh Quang
SVTH: Trn Trung Thành iii
NHN XÉT CA GIÁO VIÊN PHN BIN

………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………

………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………

Báo cáo khóa lun tt nghip GVHD: Thy Hunh Minh Quang
SVTH: Trn Trung Thành iv
DANH MC CÁC T VIT TT
T vit tt T nguyên gc
IM Instant Messaging
XMPP Extensible Messaging and Presence Protocol
XML Extensible Markup Language
JID JabberID
JQDN Full Qualified Domain Name
TLD Top Level Domain
SASL Simple Authentication and Security Layer
TLS Transport Layer Security
HTML Hypertext Markup Language
XHTML-IM Extensible Hypertext Markup Language Instant Messaging
XEP XMPP Extension Protocol
MUC Multi-User Chat

RTP Real-Time Transport Protocol
UDP User Datagram Protocol

Báo cáo khóa lun tt nghip GVHD: Thy Hunh Minh Quang
SVTH: Trn Trung Thành v
MC LC
CHNG 1: TNG QUAN 1
1.1. Tng quan v đ tài 2
1.2. Các vn đ đã thc hin trong đ tài 2
1.3. B cc ca khóa lun 3
CHNG 2: C S LÝ THUYT XMPP 4
2.1. Messaging and Presence Protocol (XMPP) 5
2.1.1. Gii thiu 5
2.1.2. Kin trúc 7
2.1.3. a ch (Address) 8
2.1.4. Streaming XML 9
2.1.5. Communication Promitives 10
2.2. Kt ni và bo mt 14
2.2.1. To kt ni gia client – server 14
2.2.2. Các phng thc chng thc 17
2.2.3. Mã hóa kt ni 18
2.3. S hin din (Presence) 19
2.3.1. ng ký s hin din 19
2.3.2. Thông báo s hin din 21
2.3.3. Thông tin trng thái 22
2.3.4.  u tiên 23
2.3.5. Thông báo s hin din trc tip 23
2.3.6. Offline 24
2.3.7. Qun lí danh sách (roster) 24
2.4. Instant Messaging 25

2.4.1. Trng thái trò chuyn (Chat States) 26
2.4.2. VCard 27
2.4.3. nh dng tin nhn 28
2.5. Khám phá dch v (Service Discovery) 28
2.6. Data Forms 30
Báo cáo khóa lun tt nghip GVHD: Thy Hunh Minh Quang
SVTH: Trn Trung Thành vi
2.7. Chat nhóm (Multi-User Chat) 32

2.7.1. C bn v Multi-User Chat 32
2.7.2. Phân quyn trong phòng 35
2.7.3. Nick name 40
2.7.4. To phòng chat 42
2.7.5. Mi bn vào phòng chat 43
2.8. Jingle và File Transfer 44
2.8.2. To phiên đ thc hin mt cuc gi 46
2.8.3. To phiên gi file 50
2.8.4. In-Band Bytestreams 55
CHNG 3: PHÂN TÍCH VÀ THIT K NG DNG 57
3.1. Gii thiu 58
3.2. S đ Use Case 58
3.3. Thit k các lp 71
3.3.1. C s d liu 71
3.3.2. Các lp phía Server 72
3.3.3. Các lp phía Client 82
CHNG 4: HIN THC NG DNG 88
4.1. Các chc nng đã hin thc đc 89
4.2. Mt s giao din ng dng 89
4.3. Cài đt và s dng 92
4.3.1. Yêu cu h thng 92

4.3.2. Cài đt 92
4.3.3. S dng 93
CHNG 5: KT LUN 95
5.1. Mt s kt qu đt đc 96
5.2. Hn ch 96
5.3. Hng phát trin 96
TÀI LIU THAM KHO 97

Báo cáo khóa lun tt nghip GVHD: Thy Hunh Minh Quang
SVTH: Trn Trung Thành vii
DANH MC HÌNH
Hình 2.1: Kin trúc phân cp client – server XMPP 7
Hình 2.2: Cu trúc tng tác ca stanza IQ 12
Hình 2.3: Quá trình bt tay đng ký s hin din 20
Hình 2.4: Các trng thái trò chuyn trong XMPP 26
Hình 2.5: Quy trình tng tác d liu Data Form 31
Hình 2.6: Quá hot đng ca mt phiên Jingle 45
Hình 3.1: Mô hình tng quát ng dng 58
Hình 3.2: Mô hình thao tác sau đng nhp 59
Hình 3.3: Lu đ kt ni 59
Hình 3.4: Lu đ đng ký 60
Hình 3.5: Lu đ ngt kt ni 61
Hình 3.6: Lu đ đng nhp 62
Hình 3.7: Lu đ đng xut 63
Hình 3.8: Lu đ thêm bn 64
Hình 3.9: Lu đ xóa bn 65
Hình 3.10: Lu đ gi tin nhn 66
Hình 3.11: Lu đ to phòng chat 67
Hình 3.12: Lu đ mi bn vào phòng chat 68
Hình 3.13: Lu đ gi tin nhn lên phòng chat 69

Hình 3.14: Lu đ gi file 70
Hình 3.15: Bng Account 71
Hình 3.16: Bng ContactList 71
Hình 3.17: Mô hình c s d liu 72
Hình 3.18: S đ các lp phía Server 72
Hình 3.19: Lp Parser 73
Hình 3.20: Lp JID 74
Báo cáo khóa lun tt nghip GVHD: Thy Hunh Minh Quang
SVTH: Trn Trung Thành viii
Hình 3.21: Lp CADO 74

Hình 3.22: Lp Tag 75
Hình 3.23: Lp ClientGroup 76
Hình 3.24: Lp Roster 76
Hình 3.25: Lp CServerApp 76
Hình 3.26: Lp Base64 77
Hình 3.27: Lp Util 77
Hình 3.28: Lp ConnectionClient 77
Hình 3.29: Lp ConnectionServer 78
Hình 3.30: Lp ConnectionBase. 78
Hình 3.31: Giao din TagHandler 79
Hình 3.32: Giao din ConnectionDataHandler 79
Hình 3.33: Lp ClientHandler 80
Hình 3.34: Giao din ConnectionHandler 80
Hình 3.35: Giao din ServerHandler 81
Hình 3.36: Lp CServerDlg 82
Hình 3.37: S đ các lp phía Client 83
Hình 3.38: Giao din NotifyHandler 83
Hình 3.39: Lp ClientProcess 84
Hình 3.40: Lp CChatDlg 85

Hình 3.41: Lp CLoginDlg 85
Hình 3.42: Lp CRegisterDlg 86
Hình 3.43: Lp CClientApp 86
Hình 3.44: Lp CAddContactDlg 86
Hình 4.1: Giao din Server 89
Hình 4.2: Giao din chính Client 90
Hình 4.3: Ca s đng ký tài khon 90
Báo cáo khóa lun tt nghip GVHD: Thy Hunh Minh Quang
SVTH: Trn Trung Thành ix
Hình 4.4: Ca s đng nhp 91

Hình 4.5: Ca s thêm bn 91
Hình 4.6: Ca s khi có yêu cu thêm bn 91
Hình 4.7: Ca s chat 92


Khóa lun tt nghip GVHD: Thy Hunh Minh Quang
SVTH: Trn Trung Thành 1























CHNG 1: TNG QUAN
Khóa lun tt nghip GVHD: Thy Hunh Minh Quang
SVTH: Trn Trung Thành 2
1.1. Tng quan v đ tài
Trong cuc sng, nhu cu thông tin liên lc là ht sc cn thit. c bit, trong
môi trng mà công ngh thông tin phát trin mt cách nhanh chóng nh hin
này thì các công ngh mi liên tc xut hin nhm phc v nhu cu thông tin liên
lc cho con ngi. Và cng theo mt xu hng tt yu khi càng có nhiu công
ngh thì đòi hi ca ngi s dng càng cao, yêu cu vic thông tin liên lc phi
d dàng, nhanh chóng, hiu qu và ti
n li.
Instant Messaging (IM) ra đi cng t nhng nhu cu thc t đó. IM là mt
hình thc giao tip thi gian thc gia các máy tính trên mng hoc các thit b
di đng có ni mng. Ngi s dng có th trao đi các tin nhn tng t nh
email hoc tham gia vào các cuc hi thoi nhóm, tuy nhiên IM khác email  ch
các tin nhn này đc gi đi và nhn mt cách nhanh chóng và các thao tác gi
nhn cng đ
n gin hn rt nhiu so vi email. V c bn mc tiêu ca các ng
dng Instant Messaging là trao đi các tin nhn vn bn, tuy nhiên theo xu hng
phát trin và yêu cu ca ngi s dng ngày càng cao thì các ng dng IM hin

nay tích hp thêm rt nhiu chc nng, có th k ra nh: trao đi hình nh, âm
thanh, hình nh, các tp d liu, ngoài ra mt s ng dng còn cho phép ngi s
dng nghe nh
c trc tuyn, chi game, xem tin tc, …
Vi vic phát trin mnh m ca các ng dng Instant Messaging thì mt lot
các giao thc đ hin thc ng IM cng ra đi. Có th k ra nh MSNP ca
Windows Live Messenger, OSCAR ca AIM, Skype ca Skype, YMSG ca
Yahoo Messenger, c đim chung ca nhng giao thc này đu là nhng
giao thc thng mi, ch phc v riêng cho ng dng ca hãng sn xut.
Bên c
nh đó nhng giao thc m nh Extensible Messaging and Presence
Protocol (XMPP) cng ra đi nh mt hng phát trin mi ca các ng dng
Instant Messaging, khi đó ngi s dng ca các ng dng IM khác nhau có th
liên lc vi nhau d dàng, khác vi s tách bit đc lp ca nhng ng dng nh
AIM, Yahoo, Windows Live Messenger, …
1.2. Các vn đ đã thc hin trong đ tài
Khóa lun tt nghip GVHD: Thy Hunh Minh Quang
SVTH: Trn Trung Thành 3
 s dng giao thc XMPP cùng vi Windows Socket API hin thc mt
ng dng Instant Messaging, đ tài cn gii quyt nhng vn đ sau:
ô Tìm hiu chi tit giao thc XMPP.
ô Da trên th vin Windows Socket API và giao thc XMPP xây dng các
lp h tr vic kt ni gia client và server, mô t cu trúc XML, phân tích
cu trúc XML.
ô Cài đt ng dng v
i nhng chc nng c bn và có th m rng.
1.3. B cc ca khóa lun
Ni dung khóa lun gm 5 chng:
ô Chng 1. Tng quan.
ô Chng 2. C s lý thuyt XMPP.

ô Chng 3. Phân tích và thit k ng dng.
ô Chng 4. Hin thc ng dng.
ô Chng 5. Kt lun.

Khóa lun tt nghip GVHD: Thy Hunh Minh Quang
SVTH: Trn Trung Thành 4






















CHNG 2: C S LÝ THUYT XMPP
Khóa lun tt nghip GVHD: Thy Hunh Minh Quang

SVTH: Trn Trung Thành 5
2.1. Messaging and Presence Protocol (XMPP)
2.1.1. Gii thiu
Extensible Messaging and Presence Protocol (XMPP) là mt giao thc m,
trc kia có tên là Jabber. XMPP da trên nn tng là cu trúc XML
(Extensible Markup Language), nói c th hn XMPP là con đng vn
chuyn các gói tin XML gia các thc th trên mng.
Không ging nh hu ht các giao thc Instant Messaging khác, XMPP là
mt giao thc m, chính vì điu này đã làm cho XMPP đc s dng khá rng
rãi, bt c cá nhân nào đu có th tin hành trin khai mt dch v XMPP ca
riêng mình và hoàn toàn có th
 tng thích vi mt s dch v ca mt cá
nhân khác. Và thông thng nhng ng dng này đu đc cung cp di
dng mã ngun m hoc min phí, điu này s là tin đ đ thu hút s mt
lng ln ngi s dng so vi các ng dng Insant Messaging khác trong
tng lai.
Trong thi gian đu Jabber ch tp trung phát trin h thng Instant
Messaging, tuy nhiên vi kh
nng m rng ca XML nên XMPP cng đã
đc xây dng đ cung cp các chc nng khá đa dng và phong phú. V c
bn XMPP cung cp các dch v h tr sau:
Å Mã hóa đng truyn (Channel encryption): đnh ngha trong RFC-3920,
cung cp kh nng mã hóa kt ni gia client – server hay gia các server
vi nhau.
Å Xác thc (Authentication): đnh ngha trong RFC-3920, cung cp kh
nng xác thc mt thc th khi l
n đu tiên kt ni đn server.
Å Hin din (Presence): đnh ngha trong RFC-3921, cung cp kh nng
thông báo mt thc th có tn ti trên mng hay ko, đng thi có th kèm
theo mt s thông tin v thc th đó.

Å Danh sách liên lc (Contacts lists): đnh ngha trong RFC-3921, cung cp
kh nng lu tr danh sách liên lc ca mt thc th trên server.
Khóa lun tt nghip GVHD: Thy Hunh Minh Quang
SVTH: Trn Trung Thành 6
Å One-to-one messaging: đc đnh ngha trong RFC-3920, cho phép 2
thc th gi tin nhn qua li vi nhau.
Å Multi-party messaging: đnh ngha trong XEP-0045, cung cp chc nng
cho mt thc th tham gia vào mt nhóm và trao đi tin nhn qua li gia
các thc th khác trong nhóm đó.
Å Thông báo (Notifications): đc đnh ngha trong XEP-0060, cung cp
chc nng tng t vi “multi-party messaging”, tuy nhiên đã đc t
i u
hóa theo chiu t mt đn nhiu thc th vi mt ch đ c th.
Å Service discovery: đnh ngha trong XEP-0030, cung cp kh nng xác
đnh các chc nng đc cung cp ca mt thc th.
Å Capabilities advertisement: đc đnh ngha trong XEP-0115, là mt
chc nng m rng ca dch v “presence”, xác đnh các hành vi x lý có
th đáp ng ca m
t ng dng khi nhn đc mt thông đip “presence” t
mt ng dng khác.
Å Structured data forms: đnh ngha trong XEP-0004, cung cp kh nng
trao đi thông tin có cu trúc gia các thc th.
Å Workflow management: đnh ngha trong XEP-0050, thng đc s
dng kt hp vi data forms đ qun lý các quy trình công vic.
Å Peer-to-peer media sessions: đnh ngha trong XEP-0166, cung cp kh
nng to và qun lý các phiên trong vic trao đi các d liu đa phng tin
nh âm thanh, hình nh, tp d liu.
Vi s lng dch v đa dng trên, XMPP cung cp kh nng xây dng các
ng dng khá phong phú, sau đây là mt s ng dng tiêu biu:
Å Instant Messaging.

Å Groupchat.
Å Gaming.
Å System control.
Å Geolocation.
Khóa lun tt nghip GVHD: Thy Hunh Minh Quang
SVTH: Trn Trung Thành 7
Å Middleware and cloud computing.
Å Data syndication
Å Voice over IP
Å Identity services.
2.1.2. Kin trúc
XMPP s dng kin trúc phân cp client – server. Ngha là các client không
kt ni và trao đi thông tin trc tip vi nhau mà phi thông qua server.

Hình 2.1: Kin trúc phân cp client – server XMPP
Ngun: Oreilly (2009), XMPP The Definitive Guide, Trang 12
im hay ca vic s dng kin trúc phân cp client – server là có th phân
chia mt cách rõ ràng các mi quan tâm trong vic xây dng ng dng. i
vi vic phát trin client thì tp trung vào giao din, mc đ tin li cho ngi
s dng, trong khi đó đi vi phát trin server thì tp trung vào đ bo mt, tin
Khóa lun tt nghip GVHD: Thy Hunh Minh Quang
SVTH: Trn Trung Thành 8
cy và kh nng m rng ca ng dng. Nó đn gin hn rt nhiu trong vic
t ch qun lý các ng dng s dng công ngh ngang hàng. Và do đó cng
đng XMPP s xây dng client đn gin nht có th, trong khi đó s phc tp
s đc đy mnh khi phát trin các server.
Kin trúc c
a XMPP có khá nhiu đim tng đng vi kin trúc World
Wide Web và Email tuy nhiên cng có mt s đim khác bit:
XMPP ging Email trong kh nng kt ni liên tên min, còn World Wide

Web thì không h tr.
Trong khi Email h tr “multiple hop” ngha là kh nng kt ni gia nhiu
server vi nhau, thì XMPP ch h tr kt ni “single hop” là ch kt ni gia 2
server vi nhau, còn World Wide Web thì không h tr chc nng này.
2.1.3. a ch (Address)
Mi thc th XMPP trên mng đc xác đnh bi mt đa ch gi là
JabberID (JID). C bn XMPP da trên h thông tên min DNS đ xây dng
cu trúc ca mt đa ch thay vì s dng đa ch IP. JID khá ging vi mt đa
ch email có dng
º
Domain
Là giá tr full qualified domain name (FQDN) ca server ni cài đt mt
dch v XMPP, ví d test.xmpp
º
Users
Khi mt tài khon đc to ti mt dch v XMPP, h thng s t đng gán
giá tr tài khon đc to vào mt JabberID có dng tng t nh mt đa ch
email (), giá tr này thng đc gi là “bare JID”
().
º
Resources
XMPP có kh nng cung cp cho mt tài khon có th đng nhp nhiu ln
vào h thng ti cng mt thi đi
m, tuy nhiên mi ln đng nhp tài khon
phi xác đnh mt giá tr gi là tài nguyên (resource) khác nhau. Khi đó giá tr
Khóa lun tt nghip GVHD: Thy Hunh Minh Quang
SVTH: Trn Trung Thành 9
tài nguyên này s đc thêm vào cui giá tr JID ca tài khon đó ví d
/home. Giá tr tài nguyên này có th là tên đa đim, tên
máy, tên phn mm mà tài khon dùng đ đng nhp. Giá tr có dng

/resource thng đc gi là “full JID”.
2.1.4. Streaming XML
V bn cht, XMPP là mt công ngh cho phép x lý các lung XML.
Trc tiên mt XMPP client phi thit lp mt kt n
i TCP đn XMPP server.
Sau đó client s thit lp mt lung XML đn server, và server cng thit lp
mt lung tng t theo chiu ngc li. Khi qua trình thit lp lung kt thúc,
gia client và server s trao đi các th XML c bn có 3 loi: <message/>,
<presence/>, <iq/>, đc gi là “stanzas”.
Di đây là mt ví d đn gin.
C: <stream:stream>
C: <presence/>
C: <iq type=“get”>
<query xmlns=“jabber:iq:roster”/>
<iq/>
S: <iq type=“result”>
<query xmlns=“jabber:iq:roster”>
<item jid=“”/>
<item jid=“user02@ test.xmpp”/>
<item jid=“user03@ test.xmpp”/>
<query/>
C: <message from=“user04@ test.xmpp”
to=“user01@ test.xmpp”>
<body>Hello!</body>
</message>
S: <message from=“user05@ test.xmpp”
to=“user02@ test.xmpp”>
<body>Hi.</body>
Khóa lun tt nghip GVHD: Thy Hunh Minh Quang
SVTH: Trn Trung Thành 10

</message>
C: <presence type=“unavailable”/>
C: </stream:stream>
Ghi chú:
Å C: stanzas t client.
Å S: stanzas t server.
2.1.5. Communication Promitives
V c bn các stanza trong XMPP là mt đn v truyn thông tin, tng t
nh mt gói tin hay bn tin  các giao thc khác, mi stanza đu có mt ý
ngha và tác dng riêng, s đc trình bày sau đây.
º
Stanza Message
Stanza message có chc nng truyn thông tin t thc th này đn thc th
khác trên mng. Thông thng, các stanza message khi đc gi đi s không
nhn đc thông tin xác nhn là đã gi, điu này giúp gim bt thi gian x lý
đng thi cng gim bt mt lng bng thông đáng k trên mng dành cho
vic xác nhn. Stanza message đc phân thành 5 loi, tùy vào giá tr ca
thuc tính type:
Å normal: tng t nh mt email vì nó có th đc tr li hoc không.
Å
chat: th hin vic trao đi tin nhn theo phiên trong thi gian thc gia
2 thc th.
Å groupchat: trao đi tin nhn gia mt nhóm thc th.
Å headline: dùng đ gi mt thông báo.
Å error: nu có li trong quá trình gi tin nhn trc thì mt bn tin error
s đc gi v.
Ngoài các thuc tính type trong mt stanza message còn các thuc tính nh
to, from dùng đ xác đnh đa ch ngi gi và nhn và có giá tr là mt
JabberID, hay body, subject th hin ni dung bn tin, hay tiêu đ bn tin.
Khóa lun tt nghip GVHD: Thy Hunh Minh Quang

SVTH: Trn Trung Thành 11
Ví d:
<message from=“user05@ test.xmpp”
to=“user02@ test.xmpp”>
<body>Hi.</body>
</message>
º
Stanza Presence
Nhn bit s hin din ca nhau trên mng là mt trong nhng đc tính ni
bt ca các h thng giao tip thi gian thc nh Instant Messaging. c tính
này có chc nng thông báo đn các thc th khác v s hin din (online) ca
mt thc th nào đó, và ch khi mt th
c th online thì mi có th tip nhn
các thông đip và giao tip vi các thc th khác. Và tt nhiên đ đm bo tính
riêng t thì không hoàn toàn lúc nào mt thc th cng mun nhn bit s hin
din ca thc th khác hoc ngc li, thông thng đ gii quyt vn đ này
các h thng thng cho phép các thc th đng ký s hin din v
i nhau.
 XMPP, stanza presence đm nhim chc nng nói trên. V c bn s hin
din ch cn xác nhn mt thc th có trên mng hay không, tuy nhiên 
XMPP, chc nng này đc m rng thêm nh cho phép tùy chnh trng thái
ca mt thc th bng mt chui vn bn tùy ý, …
Ví d:
<presence from=“user01@ test.xmpp”
<show>chat</show>
<status>Xin chào</status>
</presence>
º
Stanza IQ
Tng t nh các phng thc GET, POST, PUT trong HTTP, stanza IQ

(Info, Query) cung cp c
u trúc tng tác dng yêu cu – tr li đn gin.
Khác vi stanza message stanza IQ s nhn đc mt bn tin tr li khi gi đi.
Thông thng trong mi stanza IQ luôn tn ti thuc tính id giúp xác đnh các
bn tin tr li khi mt stanza IQ đc gi đi. Stanza IQ có 4 loi đc xác
Khóa lun tt nghip GVHD: Thy Hunh Minh Quang
SVTH: Trn Trung Thành 12
đnh theo giá tr ca thuc tính type:
Å get: yêu cu thông tin t mt thc th tng t HTTP GET.
Å set: cung cp thông tin hay là to mt yêu cu mi tng t HTTP
POST, PUSH.
Å result: tr v kt qu ca mt IQ-get, hoc là xác nhn mt IQ-set.
Å error: thông báo li cho mt IQ-set hoc get.

Hình 2.2: Cu trúc tng tác ca stanza IQ
Ngun: Oreilly (2009), XMPP The Definitive Guide, Trang 22
Ví d:
<iq from=“/school”
id=“id000001”
to=“user01@ test.xmpp”
type=“get”>
<query xmlns=“jabber:iq:roster”/>
</iq>

<iq from=“user01@ test.xmpp”
id=“id000001”
Khóa lun tt nghip GVHD: Thy Hunh Minh Quang
SVTH: Trn Trung Thành 13
to=“user01@ test.xmpp /school”
type=“result”>

<query xmlns=“jabber:iq:roster”>
<item jid=“user02@ test.xmpp”/>
<item jid=“user03@ test.xmpp”/>
<item jid=“user03@ test.xmpp”/>
</query>
</iq>
º X lý li (Error Handling)
Ngoài tr stanza IQ thì các bn tin khác trong XMPP khi đc gi đi s
không nhn đc bt k mt thông tin xác nhn nào, thông thng, khi không
có bn tin báo li thì có ngha là đã gi thành công.  to ra mt bn tin li
XMPP cung cp thành phn <error/> đc thêm vào stanza message hay
presence.  xác đnh chính xác li xy ra XMPP cung cp giá tr thu
c tính
type cho thành phn <error/> cùng vi các thành phn con bên trong
<error/>.
Ví d:
<message from=“”
to=“”
type=“error”>
<error type=“cancel”>
<service-unavailable xmlns=“urn:ietf:params:xml:ns:xmpp-
stanzas”/>
</error>
</message>
Giá tr ca type trong <error/> ngoài cancel ra có th là auth, continue,
modify hoc wait. Tuy nhiên ý ngha chính các li  đây th hin bi các phn
t con bên trong <error/>,  ví d trên là <service-unvailable/> nhng cng
có th là <item-not-found/>, <forbidden/>, <bad-request/>, <conflict/>,
<gone/>, … Danh sách li này đc th hin
đy đ trong RFC-3920.

Khóa lun tt nghip GVHD: Thy Hunh Minh Quang
SVTH: Trn Trung Thành 14
2.2. Kt ni và bo mt
2.2.1. To kt ni gia client – server
V c bn, quá trình trao đi thông tin gia client và server là mt khi
cha các th XML gi là lung XML (XML stream). ng vi mi lung XML
gia client – server tng đng nh mt phiên làm vic, client khi to mt
phiên bng cách kt ni ti server, xác đnh các thuc tính kt ni và tin hành
thao tác kt ni, sau đó client s tham gia vào các hot đng giao tip vi các
client khác trên mng, phiên s
 kt thúc khi client hoc server quyt đnh đóng
lung XML.
 to mt phiên làm vic gia client – server, tin hành mt s bc sau:
Å To kt ni TCP t client đn server.
Å M lung XML.
Å Xác đnh các đc đim ca kt ni.
Å Client xác thc vi server.
Å Xác đnh giá tr tài nguyên (resource).
º
To kt ni TCP
Trc tiên client phi xác đnh đ
a ch IP và port ca server bng các dch
v DNS và thit lp kt ni TCP đn server vi đa ch IP và port đã xác đnh.
º
To lung XML
Client s gi chui XML khi to đn server:
<?xml version=”1.0”?>
<stream:stream to=”test.xmpp”
version=”1.0”
xmlns=”jabber:client”

xmlns:stream=”
 đây, thuc tính to trong th <stream:stream/> xác đnh đa ch ca
server, version xác đnh phiên bn ca XMPP, vì là lung t client đn server
Khóa lun tt nghip GVHD: Thy Hunh Minh Quang
SVTH: Trn Trung Thành 15
nên giá tr xmlns là jabber:client, và là giá
tr mc đnh cho xmlns:stream.
Ngay sau khi nhn đc chui XML khi to trên, server cng s m mt
lung XML đn client:
<?xml version=”1.0”?>
<stream:stream from=”test.xmpp”
id=”id152635”
version=”1.0”
xmlns=”jabber:client”
xmlns:stream=”
Giá tr thuc tính id đc sinh ra mt cách ngu nhiên, và giá tr này giúp
server xác đnh chính xác lung đã m.
º
Xác đnh các đc đim kt ni
Ngay sau khi m
lung XML đn client, server s gi đn client các chc
nng mà server h tr hoc yêu cu:
<stream:features>
<starttls xmlns=”urn:ietf:params:xml:ns:xmpp-tls”>
<optional/>
<mechanisms xmlns=”urn:ietf:params:xml:ns:xmpp-sasl”>
<mechanism>PLAIN</mechanism>
<mechanism>DIGES-MD5</mechanism>
<required/>
<mechanisms/>

<compression xmlns=”
<method>zlib</method>
<compression/>
</stream:features>
 đây các tính nng mà server h tr nh:
Å Starttls: chc nng mà hóa đng truyn.

×