Tài liệu Khóa luận Xây dựng hệ thống dịch vụ giá trị gia tăng trên nền dịch vụ nhắn tin tức thì qua hệ thống tin nhắn tức thì: ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Trương Lê Thành
XÂY DỰNG HỆ THỐNG DỊCH VỤ GIÁ TRỊ GIA
TĂNG TRÊN NỀN DỊCH VỤ NHẮN TIN TỨC THÌ
QUA HỆ THỐNG TIN NHẮN TỨC THÌ
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công Nghệ Thông Tin
Cán bộ hướng dẫn: ThS Đào Minh Thư
HÀ NỘI - 2009
LỜI CẢM ƠN
Lời đầu tiên, chúng tôi xin chân thành cảm ơn quý thầy cô giáo khoa Công nghệ thông
tin đã dạy dỗ chúng tôi suốt bốn năm học vừa qua và tạo điều kiện cho phép chúng tôi
được thực hiện khoá luận tốt nghiệp này.
Đặc biệt, chúng tôi xin được bày tỏ lòng kính trọng và biết ơn sâu sắc tới cô giáo
hướng dẫn: ThS Đào Minh Thư và thầy giáo ThS Hồ Đắc Phương đã tận tình hướng
dẫn và giúp đỡ chúng tôi trong quá trình hoàn thành công trình này.
Xin chân thành cảm ơn tới công ty ViettelMedia đã giúp đỡ chúng tôi hoàn thành tốt
khóa luận.
Xin cảm ơn gia đình và bạn bè đã giúp đỡ, động viên tôi trong thời gian thực hiện đề
tài.
Cảm ơn bạn Nguyễn Thị Thu Thảo đã ...
91 trang |
Chia sẻ: haohao | Lượt xem: 1073 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Khóa luận Xây dựng hệ thống dịch vụ giá trị gia tăng trên nền dịch vụ nhắn tin tức thì qua hệ thống tin nhắn tức thì, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Trương Lê Thành
XÂY DỰNG HỆ THỐNG DỊCH VỤ GIÁ TRỊ GIA
TĂNG TRÊN NỀN DỊCH VỤ NHẮN TIN TỨC THÌ
QUA HỆ THỐNG TIN NHẮN TỨC THÌ
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công Nghệ Thông Tin
Cán bộ hướng dẫn: ThS Đào Minh Thư
HÀ NỘI - 2009
LỜI CẢM ƠN
Lời đầu tiên, chúng tôi xin chân thành cảm ơn quý thầy cô giáo khoa Công nghệ thông
tin đã dạy dỗ chúng tôi suốt bốn năm học vừa qua và tạo điều kiện cho phép chúng tôi
được thực hiện khoá luận tốt nghiệp này.
Đặc biệt, chúng tôi xin được bày tỏ lòng kính trọng và biết ơn sâu sắc tới cô giáo
hướng dẫn: ThS Đào Minh Thư và thầy giáo ThS Hồ Đắc Phương đã tận tình hướng
dẫn và giúp đỡ chúng tôi trong quá trình hoàn thành công trình này.
Xin chân thành cảm ơn tới công ty ViettelMedia đã giúp đỡ chúng tôi hoàn thành tốt
khóa luận.
Xin cảm ơn gia đình và bạn bè đã giúp đỡ, động viên tôi trong thời gian thực hiện đề
tài.
Cảm ơn bạn Nguyễn Thị Thu Thảo đã cùng tôi hoàn thành khóa luận này.
Với trình độ và kiến văn còn hạn chế của người viết, khoá luận chắc chắn không tránh
khỏi khiếm khuyết. Chúng tôi hy vọng sẽ nhận được những ý kiến nhận xét, góp ý của
các nhà khoa học, các thầy cô giáo và bạn bè về những vấn đề được triển khai trong
khoá luận. Xin trân trọng cảm ơn!
Hà Nội, tháng 5 năm 2009
Sinh viên
Trương Lê Thành
TÓM TẮT NỘI DUNG
Khóa luận của chúng tôi trình bày tổng quan về một chương trình mà chúng tôi gọi là
TCat. Đây là một chương trình có thể gửi tin nhắn cho điện thoại di động cũng như
cho một số mạng nhắn tin tức thì (Yahoo, Google). Ngoài khả năng gửi tin nhắn,
TCat còn cho phép viết thêm một số dịch vụ khác cắm vào mà không cần thay đổi
toàn bộ code. Vì thế TCat có tính mở rộng cao. Các dịch vụ viết thêm vào có khả
năng tương tác trực tiếp với người sử dụng. Ngoài ra chúng tôi còn cung cấp thêm giao
diện Web giúp người sử dụng giao tiếp với hệ thống dễ dàng.
Do hạn chế về thời gian cho nên trong phạm vi khóa luận này chúng tôi chỉ xây dựng
các tính năng cơ bản và một số dịch vụ.
MỤC LỤC
LỜI MỞ ĐẦU .....................................................................................................1
CHƯƠNG 1. ĐẶT VẤN ĐỀ ...............................................................................2
1.1. Cuộc sống hiện đại ...................................................................................2
1.1.1. Internet toàn cầu hóa..........................................................................2
1.1.2. Sống gấp ............................................................................................3
1.2. Giải pháp ..................................................................................................3
1.3. Nội dung của khóa luận ............................................................................3
CHƯƠNG 2. TỔNG QUAN VỀ TCAT ..............................................................6
2.1. Nhắn tin tức thì (IM).................................................................................7
2.2. WEB.........................................................................................................8
2.3. SMS .......................................................................................................10
2.4. Phân tích thiết kế ....................................................................................13
2.4.1 Biểu đồ ngữ cảnh ..............................................................................13
2.4.2. Cơ sở dữ liệu....................................................................................13
CHƯƠNG 3. GIAO DIỆN IM...........................................................................15
3.1. Tổng quan giao thức Yahoo Messenger (YMSG) ...................................15
3.1.1. Sự khác nhau giữa các phiên bản .....................................................16
3.1.2. Cấu trúc một gói tin của YMSG.......................................................17
3.1.3. Dịch vụ ............................................................................................19
3.1.4. Status codes (mã trạng thái) .............................................................20
3.1.5. Session.............................................................................................21
3.2. Mô tả chi tiết giao thức YMSG ...............................................................21
3.2.1. Verify ..............................................................................................22
3.2.2. Xác thực (Authentication ) ...............................................................23
3.2.3. Gửi /nhận tin nhắn ...........................................................................27
3.2.4. Gửi chú ý bắt đầu/dừng việc đánh máy ............................................28
3.2.5. Logoff..............................................................................................29
3.2.7. Thêm bạn .........................................................................................30
3.2.8. Xóa nick trong danh sách bạn ..........................................................31
3.3. Phân tích thiết kế module Yahoo bot ......................................................32
3.3.1. Ngôn ngữ .........................................................................................32
3.3.2. Cấu trúc của module ........................................................................33
3.3.3. Tiến trình thực hiện..........................................................................34
3.4. Tổng quan giao thức Google Talk...........................................................36
3.4.1. Các bước kết nối ..............................................................................37
3.4.2. Cấu trúc module...............................................................................37
CHƯƠNG 4. GIAO DIỆN WEB .......................................................................40
4.1. Tổng quan về Web..................................................................................40
4.2. Ngôn ngữ................................................................................................41
4.3. Thiết kết CSDL ......................................................................................41
4.4. Thiết kế module......................................................................................44
CHƯƠNG 5. GIAO DIỆN SMS........................................................................50
5.1. Tổng quan về SMS .................................................................................50
5.1.1. Định nghĩa SMS .............................................................................50
5.1.2. Ưu điểm của SMS............................................................................51
5.2. Gửi tin SMS từ máy tính đến điện thoại di động .....................................52
5.2.1. SMS Gateway kết nối trực tiếp tới SMSC ........................................55
5.2.2. SMS Gateway kết nối SMSC thông qua GSM modem .....................57
5.3. Ngôn ngữ................................................................................................58
5.4. Module SMS ..........................................................................................59
5.4.1. Mô hình cấu trúc module .................................................................59
5.4.2. Tiến trình thực hiện..........................................................................60
CHƯƠNG 6. CÁC DỊCH VỤ CUNG CẤP .......................................................62
6.1. Dịch vụ Chấp nhận/ Từ chối ...................................................................62
6.1.1. Thiết kế CSDL.................................................................................62
6.1.2. Hoạt động ........................................................................................63
6.2. Dịch vụ Người dùng tự định nghĩa..........................................................64
6.2.1. Thiết kế CSDL.................................................................................65
6.2.2. Hoạt động ........................................................................................65
6.3. Dịch vụ Phiên dịch .................................................................................67
6.4 Dịch vụ Thời tiết......................................................................................68
6.5. Dịch vụ Nhắc việc ..................................................................................69
6.5.1. Tổng quan........................................................................................69
6.5.2. Thiết kế CSDL.................................................................................70
6.5.3 Hoạt động .........................................................................................73
CHƯƠNG 7. PHỤ LỤC....................................................................................75
7.1. Cấu hình NowSMS kết nối trực tiếp tới SMSC của Viettel .....................76
7.2. Tạo kết nối Giữa NowSMS với GSM Modem ........................................79
TÀI LIỆU THAM KHẢO .................................................................................80
THUẬT NGỮ VIẾT TẮT
CSDL Cơ Sở Dữ Liệu Cơ sở dữ liệu
GSM
Global System for Mobile
communications
Hệ thống toàn cầu cho
truyền thông di động
HTTP Hypertext Transfer Protocol
Giao thức truyền siêu văn
bản
HTTPS Hypertext Transfer Protocol Secure HTTP an toàn
IM Instant Messaging Tin nhắn tức thì
SMPP
Short Message Peer-to-peer
Protocol
Giao thức tin nhắn ngắn
ngang hàng
SMS Short Message Service Dịch vụ tin nhắn ngắn
SMSC Short Message Service Center Trung tâm tin nhắn
TCP/IP
Transmission Control Protocol /
Internet Protocol
Giao thức truyền tin tin cậy
trên nền Internet
DANH SÁCH HÌNH VẼ
Hình 2. 1: Mô hình tổng quan ....................................................................................11
Hình 2. 2 Biểu đồ ngữ cảnh hệ thống ...........................................................................1
Hình 2. 3 CSDL của TCat ........................................................................................14
Hình 3. 1: Ảnh chụp màn hình chương trình Wireshark .............................................16
Hình 3. 2: Cấu trúc gói tin YMSG phiên bản 12 ........................................................16
Hình 3. 3: Cấu trúc gói tin YMSG phiên bản 9 ..........................................................17
Hình 3. 4: Cấu trúc gói tin YMSG phiên bản 15 ..........................................................1
Hình 3. 5: Cấu trúc trường Data...................................................................................1
Hình 3. 6: Giao thức YMSG ......................................................................................22
Hình 3. 7: Cấu trúc gói tin Verify ................................................................................1
Hình 3. 8: Gói tin Verify hồi đáp từ Server ..................................................................1
Hình 3. 10: Ảnh chụp gói tin Authentication..............................................................24
Hình 3. 9: Gói tin Authentication.................................................................................1
Hình 3. 12: Ảnh chụp gói tin Authentication ACK.....................................................25
Hình 3. 11: Gói tin trả lời Authenticaion ACK.............................................................1
Hình 3. 14: Ảnh chụp gói tin Authentication Response ..............................................26
Hình 3. 13: Gói tin Authentication Response ...............................................................1
Hình 3. 15: Gói tin Message ........................................................................................1
Hình 3. 16: Ảnh chụp gói tin Message .......................................................................28
Hình 3. 17: Cấu trúc gói tin Notify...............................................................................1
Hình 3. 18: Ảnh chụp gói tin Notify.............................................................................1
Hình 3. 20: Ảnh chụp gói tin Logoff ..........................................................................30
Hình 3. 19: Gói tin Logoff ...........................................................................................1
Hình 3. 21: Cấu trúc gói tin Add Buddy.......................................................................1
Hình 3. 22: Ảnh chụp gói tin Add Buddy...................................................................31
Hình 3. 23: Cấu túc gói tin Remove Buddy..................................................................1
Hình 3. 24: Ảnh chụp gói tin Remove Buddy.............................................................32
Hình 3. 25: Cấu trúc module Yahoo Bot ......................................................................1
Hình 3. 26 Cấu trúc module Gtalk bot.......................................................................36
Hình 4. 1 Mối liên hệ giữa các bảng trong CSDL.......................................................43
Hình 4. 2 Sơ đồ cấu trúc module WEB ........................................................................1
Hình 5. 1 SMS Gateway kết nối trực tiếp với SMSC....................................................1
Hình 5. 2 Mô hình gửi tin SMS với SMS Gateway kết nối với SMSC thông qua GSM
Modem ........................................................................................................................1
Hình 5. 3 Kết nối của Module SMS với SMS Gateway..............................................59
Hình 6. 1: Mối quan hệ Friend - User.........................................................................63
Hình 6. 2: Mối quan hệ User và Udef.........................................................................65
Hình 6. 3: Mối quan hệ CSDL trong dịch vụ nhắc việc theo thời gian........................71
Hình 6. 4: Mối quan hệ CSDL trong dịch vụ nhắc việc theo sự thay đổi của trang web
..................................................................................................................................72
Hình 7. 1 Giao diện của NowSMS .............................................................................75
Hình 7. 2 Lựa chọn kết nối tới SMSC ........................................................................76
Hình 7. 3 Cấu hình kết nối .........................................................................................77
Hình 7. 4 Chạy dịch vụ ..............................................................................................78
Hình 7. 5 Kết nối tới modem......................................................................................79
Hình 7. 6 Lựa chọn thiết bị GSM để kết nối...............................................................79
~ 1 ~
LỜI MỞ ĐẦU
Internet đang ngày càng phát triển nhằm đáp ứng nhu cầu của con người. Nhờ sự tiến
bộ của khoa học nói chung và công nghệ thông tin nói riêng, diện mạo của Internet
đang ngày càng rõ rệt và "có hình hài". Internet là kết quả tất yếu của nhu cầu cần
được đáp ứng của con người, đó là tập hợp các nhu cầu cực kỳ phong phú và đa dạng
của mọi người khắp nơi trên thế giới. Điều đó tạo nên sự phức tạp, sức hấp dẫn và
cuốn hút của Internet.
Ngày nay, Internet được sử dụng rộng rãi trên toàn thế giới. Những ứng dụng trên
Internet đã có bước phát triển bùng nổ, với nhiều loại hình dịch vụ mới như thương
mại điện tử, giải trí trực tuyến, đào tạo trực tuyến,…Sự ra đời của các dịch vụ trên
Internet đã giúp ích rất nhiều cho cuộc sống của mọi người thuận tiện, thoải mái, tốt
đẹp hơn.
Vì những lý do trên chúng tôi đã nảy ra ý định xây dựng lên chương trình có thể nhắn
tin tự động, trả lời tự động đến nick Yahoo, GoogleTalk hay số điện thoại của người
sử dụng với những nội dung đã được đăng ký với chúng tôi như giá chứng khoán, giá
ngoại tệ, thời tiết,…
Chương trình của chúng tôi xây dựng được gọi là TCat.
TCat có tính ứng dụng thực tiễn cao. Chúng tôi đã đưa vào thực tiễn một số dịch vụ
của TCat như dịch vụ Phiên dịch, Nhắc việc. Dịch vụ Phiên dịch là dịch vụ giúp
người sử dụng dịch một đoạn văn bản, một từ hoặc thậm chí cả một tài liệu. Dịch vụ
này của chúng tôi sử dụng lại dịch vụ miễn phí của Google là Google Translate. Dịch
vụ Nhắc việc là dịch vụ dịch vụ cho phép người sử dụng có thể đăng ký nhận tin nhắn
tự động (nhắc việc) tới chính nick Yahoo, GoogleTalk hoặc số điện thoại của mình
vào một thời điểm nào đó, hoặc khi một trang Web có sự thay đổi,…
~ 2 ~
CHƯƠNG 1. ĐẶT VẤN ĐỀ
1.1. Cuộc sống hiện đại
1.1.1. Internet toàn cầu hóa
Toàn cầu hóa (Globalization) là “một xu hướng làm các mối quan hệ trở nên ít bị ràng
buộc bởi địa lý lãnh thổ”, là khái niệm dùng để miêu tả các thay đổi trong xã hội và
trong nền kinh tế thế giới, tạo ra bởi mối liên kết và trao đổi ngày càng tăng giữa các
quốc gia, các tổ chức hay các cá nhân ở góc độ văn hoá, kinh tế, v.v. trên quy mô toàn
cầu. Về bản chất thì toàn cầu hóa là sự mở rộng thị trường ra ngoài biên giới quốc gia.
Internet đang ngày càng phát triển nhằm đáp ứng nhu cầu của con người. Nhờ sự tiến
bộ của khoa học nói chung và công nghệ thông tin nói riêng, diện mạo của Internet
đang ngày càng rõ rệt và "có hình hài". Internet là kết quả tất yếu của nhu cầu cần
được đáp ứng của con người, đó là tập hợp các nhu cầu cực kỳ phong phú và đa dạng
của mọi người khắp nơi trên thế giới. Điều đó tạo nên sự phức tạp, sức hấp dẫn và
cuốn hút của Internet.
Internet được sử dụng ngày càng rộng rãi. Và giờ đây Internet đã trở thành mạng toàn
cầu.
Và tại Việt Nam, việc sử dụng Internet ngày phổ biến. Điều này thể hiện rõ ở số lượng
người dùng gia tăng nhanh chóng, số lượng dịch vụ Internet ngày càng nhiều và thời
gian truy cập Internet trong mỗi ngày cũng dài thêm. Theo kết quả khảo sát gần đây
của công ty nghiên cứu thị trường TNS Public & Social Research Việt Nam tiến hành
ở bốn thành phố lớn của Việt Nam gồm Thành phố Hồ Chí Minh, Hà Nội, Đà Nẵng và
Cần Thơ với 1,200 người tham gia trả lời ý kiến, thì hiện nay người sử dụng Internet ở
Việt Nam đang ngày càng dành nhiều thời gian trên mạng hơn, với thời lượng trung
bình mỗi ngày là 43 phút trong năm 2008, thời lượng này gần gấp đôi so với hồi năm
2006.[1]
Theo đó, có đến 72% số người trong độ tuổi 18 - 30 sử dụng Internet thường xuyên để
tán gẫu (chat); và 81% số người trong độ tuổi 41-50 thường xuyên đọc tin tức trên
Internet.
~ 3 ~
1.1.2. Sống gấp
Ngày nay, mọi người ai cũng bận rộn với công việc hàng ngày, với cuộc sống gia đình,
với những quan hệ xã hội. Cuộc sống có quá nhiều điều khiến con người phải lo toan,
phiền muộn. Bản thân mỗi con người bị cuốn vào vòng xoay của công việc, học tập và
những toan tính hàng ngày. Cuộc sống thật bộn bề những lo toan, suy nghĩ.
Đôi khi mọi người cảm thấy mệt mỏi khi phải suy nghĩ quá nhiều thứ trong đầu và để
sắp xếp mọi thứ cho tốt đẹp.
Và thời gian rảnh trong cuộc sống giúp cho con người thư thái, giải trí cũng ít đi.
1.2. Giải pháp
Hiện nay, có những người truy cập hàng giờ trên Internet chỉ để xem giá chứng khoán
thay đổi, xem bài viết của mình trên diễn đàn đã được trả lời chưa, xem đã có thông tin
mới thật lãng phí thời gian. Hay việc không để ý đến thời tiết hàng ngày làm ai đó bị
sốt, bị ốm,.. làm hại cho sức khỏe. Hay một việc gì đó quan trọng bị lãng quên,… làm
ảnh hưởng không tốt đến công việc cuộc sống của mọi người.
Từ những lý do trên chúng tôi đã nảy ra ý định xây dựng lên chương trình có thể nhắn
tin tự động, trả lời tự động đến nick Yahoo, GoogleTalk hay số điện thoại của người
sử dụng với những nội dung đã được đăng ký với chúng tôi như giá chứng khoán, giá
ngoại tệ, thời tiết,…sẽ giúp ích một phần cho cuộc sống.
Chương trình của chúng tôi xây dựng được gọi là TCat.
TCat là một chương trình mở, không chỉ có các dịch vụ đã cung cấp mà còn cho phép
người sử dụng thêm các dịch vụ vào.
1.3. Nội dung của khóa luận
Khóa luận của chúng tôi gồm có bảy chương cụ thể sau:
Chương 1. Đặt vấn đề và cách giải quyết
Chương này nhằm nói tới nguyên nhân khách quan, mục đích khi xây dựng TCat,
tính ứng dụng thực tiễn, những lợi ích của TCat và những nội dung chính của khóa
luận.
~ 4 ~
Chương 2. Tổng quan về TCat, các giao diện của TCat và thiết kế cơ sở dữ liệu của
TCat
Nội dung chủ yếu của chương này là nói về tổng quan TCat. TCat gồm có ba module
chính đó là IM, Web và SMS với một số dịch vụ như Phiên dịch, Nhắc việc,…Module
IM là module giúp người sử dụng giao tiếp với hệ thống thông qua các dịch vụ tin
nhắn tức thì miễn phí. Người sử dụng chỉ cần đăng ký một nick chat miễn phí từ nhà
cung cấp dịch vụ chat, sau đó dùng nick chat của mình (có thể là nick Yahoo,
GoogleTalk, Skype ..) yêu cầu một dịch vụ từ TCat. Module Web đảm nhận công
việc là giao diện giao tiếp với người sử dụng, đọc cơ sở dữ liệu nếu như các module
hay dịch vụ khác yêu cầu và trả về kết quả. Module SMS là module gửi tin nhắn từ
máy tính tới số điện thoại của người sử dụng mà đã đăng ký với TCat.
Chương 3. Giao thức Yahoo Messenger với module Yahoo Bot và Giao thức Google
Talk với module Gtalk Bot
Trong chương này gồm có hai phần:
Phân tích, mô tả giao thức của Yahoo Messenger, phân tích thiết kế và xây dựng
module Yahoo Bot.
Tổng quan về giao thức của Google Talk, phân tích thiết kế và xây dựng module Gtalk
Bot.
Chương 4. Tổng quan giao diện Web của TCat
Nội dung của chương viết về tổng quan, phân tích thiết kế giao diện Web. Web là
module cung cấp cho người dùng những tính năng nâng cao, giúp TCat quản lý người
dùng một cách dễ dàng hơn.
Chương 5. Module SMS với các mô hình kết nối để gửi tin nhắn từ máy tính tới điện
thoại di động
Chương này với nội dung trình bày về các cách kết nối để có thể gửi tin nhắn từ máy
tính tới điện thoại di động và phân tích thiết kế, cấu trúc module SMS.
Có hai cách kết nối được đề cập trong chương này:
Cách thứ nhất là kết nối trực tiếp SMS Gateway tới SMSC của nhà cung cấp dịch vụ
Viettel.
~ 5 ~
Cách thứ hai là kết nối tới SMS Gateway với GSM Modem và sau đó GSM Modem sẽ
giao tiếp với SMSC trên mạng di động.
Chương 6. Phân tích, thiết kế các dịch vụ đã cung cấp của TCat
Trong chương này chúng tôi trình bày một số dịch vụ đã cung cấp của TCat.
Các dịch vụ của chúng tôi gồm có: Phiên dịch, Chấp nhận/từ chối, Nhắc việc, Thời tiết
và dịch vụ người dùng tự định nghĩa.
Trong đó dịch vụ Phiên dịch là dịch vụ khi người dùng gõ lệnh theo cú pháp mặc định.
TCat sẽ trả về cho người dùng nghĩa của từ mà người dùng muốn tra.
Dịch vụ Chấp nhận/Từ chối được kích hoạt khi một người sử dụng thêm một ai đó vào
danh sách bạn bè (Friend). Dịch vụ này có ý nghĩa đơn giản là khi một người nhận
được những tin nhắn của một người sử dụng TCat của chúng tôi để gửi tin thì người
nhận đó có thể chấp nhận hoặc là từ chối nhận các tin nhắn sau.
Dịch vụ Thời tiết cũng giống như dịch vụ Phiên dịch. Khi muốn biết thời tiết của một
vùng nào đó trong nước Việt Nam thì người sử dụng sẽ gõ một câu lệnh theo cú pháp
mặc định sau đó dịch vụ sẽ gửi lại thông tin thời tiết về vùng nhận được.
Dịch vụ người dùng tự định nghĩa là dịch vụ cho phép một người sử dụng dễ dàng
thêm các dịch vụ vào TCat.
Chương 7. Phụ lục kèm theo
Chương này với nội dung về cách cấu hình SMS Gateway theo hai cách kết nối được
trình bày ở chương 5.
Trong khóa luận này tôi đã phân tích và xây dựng module IM, phân tích thiết kế
module Web, xây dựng các dịch vụ: Phiên dịch, Người dùng tự định nghĩa, Chấp nhận
từ chối, Nhắc việc khi có trang web thay đổi.
Còn bạn Thảo đã phân tích xây dựng module SMS, xây dựng module Web, xây dựng
các dịch vụ: Nhắc việc theo thời gian, thời tiết.
~ 6 ~
CHƯƠNG 2. TỔNG QUAN VỀ TCAT
TCat là sự kết hợp của các module IM, SMS, WEB. Mỗi module đảm nhiệm một
chức vụ khác nhau trong toàn bộ hệ thống. TCat cung cấp cho người dùng các dịch
vụ dựa trên việc nhắn tin qua nick Yahoo, GoogleTalk hoặc Mobile.
Các module ghép lại đảm nhiệm vị trí khung chương trình (framework). Bộ khung
chương trình này chịu trách nhiệm gửi và nhận tin nhắn qua Yahoo, GoogleTalk hoặc
Mobile. TCat được thiết kế là chương trình mở. Điều này có nghĩa là TCat được
thiết kế sao cho việc thêm các dịch vụ là hoàn toàn đơn giản. Vì có khung chương
trình rồi lập trình viên hoặc bất kì một người sử dụng nào cũng có thể thêm vào các
dịch vụ khác. Đối với những dịch vụ phức tạp thì ngưởi sử dụng cần nghiên cứu các
hàm, giao diện do khung chương trình cung cấp.
Chúng tôi đưa vào hai loại dịch vụ.
Loại dịch vụ thứ nhất: dịch vụ gửi tin nhắn thụ động. Điều này có nghĩa là dịch vụ chỉ
được kích hoạt khi nào có yêu cầu. Ví dụ như các dịch vụ Phiên dịch, Nhắc việc. Dịch
vụ Phiên dịch là dịch vụ giúp người sử dụng dịch một đoạn văn bản, một từ hoặc thậm
chí cả một tài liệu. Dịch vụ này của chúng tôi sử dụng lại dịch vụ miễn phí của Google
là Google Translate. Dịch vụ Nhắc việc là dịch vụ dịch vụ cho phép người sử dụng có
thể đăng ký nhận tin nhắn tự động (nhắc việc) tới chính nick Yahoo, GoogleTalk hoặc
số điện thoại của mình vào một thời điểm nào đó, hoặc khi một trang Web có sự thay
đổi,…Mỗi khi yêu cầu dịch vụ, người sử dụng chỉ cần viết lệnh và gửi cho một nick
Yahoo hoặc Google Talk tự động của chúng tôi . Khi khung chương trình nhận được
thông điệp sau đó sẽ gọi dịch vụ tương ứng, phân tích các tham số truyền vào, sau đó
lấy kết quả trả về cho người sử dụng.
Loại dịch vụ thứ hai: dịch vụ gửi tin nhắn chủ động (hay còn gọi là dịch vụ tự động).
Dịch vụ được kích hoạt khi có một sự kiện nào đó xảy ra. Sự kiện này được người
dùng đăng ký trước, có thể là gửi một nội dung tin nhắn vào một thời điểm nào đó,
thông báo sự thay đổi của một trang web (giá vàng, chứng khoán thay đổi, có bài trả
lời trong diễn đàn). Tất nhiên để chống lại tình trạng spam tin nhắn, người sử dụng
phải xác nhận mình cho phép TCat gửi tin nhắn cho mình. Thực chất của dịch vụ này
~ 7 ~
là một tiến trình tự động chạy. Cứ mỗi có sự kiện xảy ra tiến trình sẽ lấy các nick cần
liên lạc thông qua truy vấn vào cơ sở dữ liệu, sau đó gửi thông điệp cho họ.
Đối với việc thêm dịch vụ của bên thứ ba. Chúng tôi đưa ra hai phương án giải quyết.
Thứ nhất: dịch vụ bên thứ ba cung cấp khá phức tạp và có liên quan một phần đến hệ
thống. Với loại dịch vụ như thế này thì chỉ có cách duy nhất cần những người biết về
chuyên môn (ví dụ như lập trình viên) viết các dịch vụ tương ứng rồi đưa vào hệ
thống.
Thứ hai: đối với các dịch vụ đơn giản và không liên quan đến TCat. Bên thứ ba có thể
sử dụng một dịch vụ gọi là “Dịch vụ người dùng tự định nghĩa”. Dịch vụ này mỗi lần
có yêu cầu sẽ kết nối đến một liên kết, lấy các thông tin cần thiết về, sau đó đưa trả lại
cho người sử dụng. Các thông tin trả về phải được đưa theo một chuẩn đã thống nhất
trước.
Người sử dụng cũng như bên thứ ba cần phải đăng ký một tài khoản để sử dụng hoặc
tạo ra các dịch vụ.
Ngoài việc cung cấp khung chương trình của TCat, chúng tôi còn cung cấp thêm một
số dịch vụ kèm theo, chi tiết các dịch vụ được mô tả ở chương 6.
Trong luận văn này, chúng tôi đưa vào thuật ngữ bot với ý nghĩa là một chương trình
máy tính, thực hiện một số nhiệm vụ tự động. Thuật ngữ WEB để chỉ một trong những
module của chúng tôi (khác với web).
2.1. Nhắn tin tức thì (IM)
Module này giúp người sử dụng giao tiếp với TCat thông qua các dịch vụ IM miễn
phí. Người sử dụng chỉ cần đăng ký một nick chat miễn phí từ nhà cung cấp dịch vụ
chat, sau đó dùng nick chat của mình (có thể là nick Yahoo, GoogleTalk, Skype ..) yêu
cầu một dịch vụ từ TCat. Quá trình này có thể tưởng tượng như sau:
Người sử dụng dùng nick chat của mình chat với nick Yahoo hoặc nick Google Talk
trả lời tự động của chúng tôi (các nick trả lời tự động thực ra là một chương trình
chúng tôi tạm gọi là con bot) yêu cầu nhắc việc, tra từ điển, xem tỷ giá chứng khoán,
xem tin tức, xem dự báo thời tiết, gửi tin cho điện thoại di động, thu thập ý kiến …
Con bot sẽ đưa ra các hồi đáp ứng với yêu cầu của người sử dụng.
~ 8 ~
Nhìn chung về phía IM thì người sử dụng giao tiếp khá hạn chế với con bot. Người sử
dụng chỉ có thể yêu cầu dịch vụ bằng cách gửi tin đến con bot theo một cú pháp nhất
định nào đó (Chẳng hạn muốn xem dự báo thời tiết thì gõ /weather HANOI ). Vì thế
một số tính năng nâng cao sẽ rất khó sử dụng hoặc không được cài đặt vì khá phức tạp.
Ví dụ với dịch vụ nhắc việc cho một danh sách dài. Nhắc việc vào lúc 8h của thứ sáu
hàng tuần. Nội dung của nhắc việc là tin dự báo thời tiết. Với một yêu cầu khá phức
tạp như vậy thì cấu trúc lệnh sẽ rất phức tạp, người sử dụng sẽ rất lúng túng khi sử
dụng dịch vụ vì không thể nhớ hết cấu trúc lệnh.
Ngoài ra, chúng tôi còn cung cấp các dịch vụ do người dùng tự định nghĩa. Tất nhiên,
để sử dụng dịch vụ này, người sử dụng phải tuân thủ một số chuẩn do chúng tôi đề ra.
Và sẽ khá phức tạp cho người sử dụng nếu chỉ có duy nhất một cổng giao tiếp qua IM.
Người sử dụng cấu hình dịch vụ của họ rất khó khăn qua dòng lệnh (không có giao
diện đồ họa), tính bảo mật của phương thức này cũng không cao.
Để đảm bảo công việc không bị tắc nghẽn, và tiện cho quá trình mở rộng sau này.
Chúng tôi thiết kế sao cho module IM có thể có nhiều thể hiện (instance). Nói một
cách khác, nếu coi module IM như một chương trình thì có thể chạy nhiều chương
trình như thế. Trong tương lai, để phục vụ nhiều người thì một nick (Yahoo, Gtalk) là
không đủ cần phải mở rộng ra nhiều nick. Có thể thuê những máy khách hàng nếu máy
chủ không đủ tài nguyên để chạy các ứng dụng IM (có băng thông mạng cao, máy cấu
hình mạnh). Khách hàng khi chạy ứng dụng IM cần có Username và Password, mỗi
lần chạy sẽ được tính thời gian online sau đó qui đổi ra tiền (hoặc cái gì đó có giá trị)
để tặng lại khách hàng.
2.2. WEB
Như đã nói ở phần trên, người sử dụng có thể tự mình cài đặt dịch vụ và sử dụng các
chức năng nâng cao của TCat. Nhưng việc sử dụng được chức năng nâng cao thông
qua IM sẽ rất khó khăn. Vì thế, chúng tôi đưa thêm vào module WEB. Thông qua giao
diện WEB thì chúng tôi sẽ quản lý người sử dụng dễ dàng hơn (tiện cho việc thương
mại hóa).
Người sử dụng khi muốn sử dụng các dịch vụ nâng cao trên WEB phải đăng ký cho
mình một tài khoản, việc này giúp quản lý công việc dễ dàng hơn. Ngoài ra việc đăng
ký tài khoản cũng giúp cho việc thương mại hóa TCat sau này thuận tiện hơn.
~ 9 ~
Giao diện WEB hỗ trợ một số tính năng nâng cao cho người dùng. Người dùng có thể
tự mình thêm vào một dịch vụ thông qua hai bước là: đăng ký từ khóa và cài đặt dịch
vụ. Một từ khóa cho phép chỉ đến một dịch vụ. Sau khi có từ khóa, người dùng muốn
cài đặt dịch vụ phải cấu hình các tham số cho phù hợp (thông điệp trả về, các args).
WEB dễ dàng sử dụng các dịch vụ nâng cao ví dụ như dịch vụ Nhắc việc, nếu muốn
nhắc việc theo chu kỳ, hoặc khi một sự kiện nào đó xảy ra. Việc cấu hình cho dịch vụ
trên thông qua IM sẽ phức tạp. Tuy nhiên nếu thông qua giao diện WEB thì mọi việc
rất dễ dàng.
Ngoài việc giúp quản lý người sử dụng dễ dàng và giúp người sử dụng quản lý công
việc dễ dàng hơn, module WEB còn kết nối trực tiếp đến CSDL, thực hiện các công
việc giúp giảm tải cho các module khác.
Lấy ví dụ về dịch vụ nhắc việc.
Với module IM, ý tưởng đơn giản ban đầu là module IM sẽ trực tiếp kết nối đến
CSDL, và cứ mỗi X phút (X là một số nào đó, có thể 1,2,3..) sau đó lấy danh sách các
nick cần nhắc việc. Sẽ rất trôi chảy nếu chỉ có vài chục đến vài trăm nick. Nhưng sẽ là
thảm họa nếu có tới vài trăm đến vài nghìn nick. Thảm họa ở chỗ Yahoo sẽ khóa
(block) nick nếu trong thời gian 1-3 giây nick đó gửi đi quá nhiều tin nhắn (Không cần
biết gửi đến nhiều nick hay không, chỉ cần biết là gửi nhiều tin nhắn. Yahoo làm việc
này để ngăn chặn việc spim tin nhắn).
Ý tưởng cải tiến trong trường hợp này là sẽ đưa vào nhiều con bot làm nhiệm vụ nhắn
tin. Con bot có thể hiểu là các thể hiện (instance) của module IM. Tuy nhiên cùng với
ý tưởng trên, một bài toán khó đặt ra là vấn đề đồng bộ giữa các con bot. Làm sao cho
các con bot không lấy dữ liệu trùng nhau, phân chia công việc, giảm tải một cách có
hiệu quả nhất. Đây là một bài toán khó, liên quan đến CSDL phân tán. Tuy nhiên nếu
tư duy theo một cách khác thì sẽ tránh được bài toán khó này mà vẫn đạt được mục
tiêu như ban đầu.
Ý tưởng của chúng tôi rất đơn giản. Chúng tôi sẽ giảm tải cho module IM. Đưa vào
module WEB ở giữa module IM và CSDL. Nói cách khác, Module IM bây giờ không
thao tác trực tiếp với CSDL nữa. Mọi thao tác đều thông qua WEB. Như vậy module
IM không mất tài nguyên kết nối CSDL, cũng không cần giải quyết bài toán khó về
việc đồng bộ hóa giữa các con bot. Con bot chỉ cần yêu cầu kết nối đến WEB, WEB sẽ
xử lý hết tất cả các công việc phức tạp, sau đó đưa lại cho con bot một danh sách các
~ 10 ~
nick Yahoo cần nhắc việc. Việc xử lý đồng bộ bây giờ đưa về việc xử lý tuần tự ở
WEB. Ở phía WEB việc xử lý rất đơn giản. WEB chỉ cần thống kê số lượng các con
bot online trên mạng, sau đó chia đều công việc cho chúng. Nếu số lượng nick cần
nhắc việc quá nhiều so với số lượng đáp ứng được của mỗi con bot thì WEB chỉ trả lại
số lượng nick nhắc việc mà mỗi con bot có thể làm được.
Để bảo mật thì mỗi con bot có một chuỗi khóa bí mật. Khi lấy thông tin từ WEB thì
con bot phải cung cấp chuỗi khóa đó cho WEB kiểm tra. Mọi kết nối đến WEB đều
dựa trên giao thức HTTPS.
2.3. SMS
Không phải lúc nào mọi người cũng có thể online. Tuy nhiên nhu cầu kết nối là điều
không thể thiếu. Module SMS được đưa vào để hoàn thiện thêm cho TCat. Sử dụng
dịch vụ SMS có thể gửi tin nhắn cho số điện thoại nào đó, nạp tiền vào tài khoản (nếu
thương mại hóa).
Ví dụ sử dụng dịch vụ Nhắc việc trong việc coi thi: văn phòng khoa của nhà trường
muốn nhắc nhở các các thầy cô giáo là đúng 8h hôm nay bắt đầu coi thi học kỳ .Tất
nhiên văn phòng khoa có thể gọi điện hoặc nhắn tin đến từng thầy cô một. Tuy nhiên
sẽ là lãng phí cả về tài chính, thời gian và công sức nếu có quá nhiều. Văn phòng khoa
có thể sử dụng dịch vụ Nhắc việc thông qua giao diện WEB. Chỉ cần upload lên danh
sách các thầy cô và số điện thoại tương ứng. Sau đó là việc chọn thời gian và thông
điệp và các tin nhắn sẽ được gửi đến các số điện thoại ở trên. Vậy là mọi việc đã xong.
Thông qua dịch vụ này người sử dụng không cần phải nhớ quá nhiều lịch làm việc và
an tâm rằng mình sẽ không quên một việc gì đó.
~ 11 ~
Hình 2. 1: Mô hình tổng quan
WEB
CSDL
WService
WService
WAService
Giao
Diện
I
PyService
PyService
PyService
PyService
YahooBot
GTalkBot
SMSBot
Internet
WService
CSDL
CSDL
CSDL
~ 12 ~
Trên Hình 2. 1: Mô hình tổng quan là hình vẽ khái quát về mô hình tổng quan của
TCat. TCat gồm ba Module chính là WEB, IM, SMS.
Moudle IM gồm hai module con là Yahoo Bot và Gtalk Bot. Cả hai đều có thể có
nhiều thể hiện (instance). Module SMS cũng như vậy. Cả hai module đều kết nối với
các dịch vụ PyService thông qua giao diện I. Giao diện I giúp các module IM và
SMS kết nối với các dịch vụ dễ dàng hơn.
PyService là các dịch vụ được viết bằng Python. Các dịch vụ này được viết theo tiêu
chí càng đơn giản càng tốt, sẽ không tự xử lý dữ liệu mà chuyển sang một nơi nào đó
xử lý dữ liệu rồi nhận kết quả trả về. Trong các moudle IM, SMS có thể thấy còn có
thêm CSDL. Đây là những CSDL của riêng các module đó, các module này sử dụng
CSDL với mục đích tăng tốc, giảm chi phí về tài nguyên mạng.
Các module IM, SMS kết nối dịch vụ PyService thông qua giao diện I. Điều này có
nghĩa là các dịch vụ PyService chỉ cần viết một lần, sẽ chạy được trên cả hai moudle
IM và SMS. Muốn có được điều này thì khi viết code các dịch vụ PyService phải tuân
thủ một số chuẩn.
Các dịch vụ PyService sẽ không tự xử lý dữ liệu mà kết nối đến nơi khác để lấy kết
quả trả về. Nơi khác ở đây có thể là một nguồn từ Internet hoặc là nhưng dịch vụ do
WEB cung cấp (WService). Những dịch vụ mang tính đặc trưng (ví dụ như nhắc việc),
có liên quan đến CSDL của TCat thì PyService sẽ kết nối đến WService, còn những
dịch vụ chung chung (chẳng hạn như Thời tiết, Phiên dịch …) thì PyService sẽ kết nối
đến nguồn dữ liệu từ Internet.
Ở đây có một dịch vụ đặc biệt được cung cấp ở bên phía WEB, đó là dịch vụ cho phép
người sử dụng tự định nghĩa (WAService). Dịch vụ này cho phép người sử dụng có
thể tự mình thiết kế, tạo nên một dịch vụ. Để làm được điều này, người sử dụng cần
tuân thủ theo một số chuẩn đã đề ra trước. Thực chất của dịch vụ này rất đơn giản,
người sử dụng chỉ cần khai báo một liên kết (link) đến trang cung cấp thông tin và xử
lý dữ liệu của họ. Tiếp theo người sử dụng cần khai báo các tham số đầu vào cần thiết.
Khi một người dùng khác muốn sử dụng dịch vụ này, chỉ cần đánh đúng cú pháp thì
TCat sẽ tự động kết nối đến dịch vụ đó, lấy thông tin trả về, xuất thông tin đó ra theo
mẫu do người sử dụng thiết kế.
~ 13 ~
2.4. Phân tích thiết kế
2.4.1 Biểu đồ ngữ cảnh
Hình bên dưới là biểu đồ ngữ cảnh của TCat
Người sử dụng tương tác với TCat để sử dụng các dịch vụ. Dịch vụ đến người sử
dụng theo hai cách, chủ động và bị động.
Ở dạng chủ động, thông điệp được gửi đến người sử dụng mà người sử dụng không
cần có một tác động nào cả.
Ở dạng bị động, thông điệp đầu tiên từ người sử dụng gửi đến TCat là thông điệp yêu
cầu dịch vụ. TCat sẽ phân tích yêu cầu của người sử dụng, sau đó kiểm tra xem dịch
vụ này có cần phải liên kết đến nhà cung cấp dịch vụ để lấy kết quả không. Nếu cần thì
TCat mở một kết nối truy vấn đến nhà cung cấp dịch vụ để lấy kết quả trả về. Sau đó
TCat sẽ phân tích kết quả trả về, lấy các thông tin cần thiết sau đó trả lại cho người sử
dụng dưới dạng một hồi đáp.
2.4.2. Cơ sở dữ liệu
Cơ sở dữ liệu của TCat tập trung hầu hết ở phần WEB. Nói cách khác, chỉ có phần
WEB mới được quyền tương tác trực tiếp với CSDL, các module khác không được
phép tương tác trực tiếp với CSDL vì lý do bảo mật. CSDL sẽ được nói rõ ở phần
WEB. Ở chương hai này, chúng tôi chỉ giới thiệu tóm tắt.
Người
sử
dụng
Người
sử
dụng
TCat
Nhà
cung
cấp
dịch
vụ
Y/C dịch vụ
Hồi đáp
Thông điệp
Truy vấn
Kết quả
Hình 2. 2 Biểu đồ ngữ cảnh hệ thống
~ 14 ~
CSDL được chia làm hai phần chính, phần khung chương trình và phần dịch vụ.
Hình 2. 3 CSDL của TCat
Phần khung chương trình sẽ bao gồm các bảng Friend, User, GroupACL, Service, Bot,
Group là phần lõi của chương trình. Các bảng này sẽ được xây dựng sẵn từ đầu. Mối
liên hệ giữa các bảng cũng như mô tả chi tiết sẽ được nói rõ ở phần chương bốn.
Các bảng còn lại thuộc phần dịch vụ. Các bảng thuộc phần dịch vụ được xây dựng
thêm sau này, tùy theo mỗi dịch vụ ta lại xây dựng các bảng cho phù hợp. Vì các bảng
thuộc phần dịch vụ được xây dựng sau nên chúng phải tương thích với các bảng thuộc
phần khung chương trình.
~ 15 ~
CHƯƠNG 3. GIAO DIỆN IM
3.1. Tổng quan giao thức Yahoo Messenger (YMSG)
Yahoo Messenger hiện nay là một chương trình chat khá phổ biến của người Việt Nam
cũng như trên thế giới. Theo thống kê thì có khoảng 248 triệu người đăng ký sử dụng
dịch vụ chat của Yahoo[2]. Ở Việt Nam thì Yahoo Messenger đã chiếm ưu thế hơn rất
nhiều so với các loại khác (Skype, GoogleTalk, AIM, Windows Live Messenger),
mặc dù trên thế giới thì tỷ lệ khá cân bằng.
Mô hình của giao thức Yahoo theo kiểu Client – Server. Theo đó Client là chương
trình Yahoo Messenger chat bình thường người sử dụng hay chạy trên máy tính.
Server là một số máy chủ của Yahoo. Khi đăng nhập Client gửi yêu cầu đến Server.
Server có quyền từ chối yêu cầu hoặc xác thực yêu cầu. Sau khi đã được Server chấp
nhận cho phép kết nối. Client sẽ lấy toàn bộ danh sách bạn bè, các tùy chọn cá nhân,
vv... từ Server. Không có một kết nối trực tiếp nào được mở khi một Client muốn kết
nối để trò chuyện với một Client khác (hai người trên hai máy tính, chạy hai chương
trình Yahoo Messenger, chát với nhau) thì, mọi kết nối đề thông qua Server[3]. Server
sẽ đóng vài trò là người điều khiển cuộc trò chuyện này.
Giao thức của Yahoo Messenger là giao thức đóng. Chương trình chát Yahoo
Messenger là chương trình mã đóng (closed source) do vậy chúng tôi sẽ không nhận
được bất cứ sự hỗ trợ nào của Yahoo. Mọi thông tin chúng tôi có ở dưới đây đều dựa
theo tài liệu tìm kiếm được trên internet và dựa vào việc bắt các gói tin của chương
trình Yahoo Messenger. Việc bắt gói tin tôi sử dụng chương trình WireShak[4]. Ban
đầu tôi sử dụng chương trình WireShark phiên bản cũ (phiên bản 0.99.0) đã có hỗ trợ
giao thức YMSG nhưng chưa đầy đủ, việc bắt gói tin và lọc gói tin gặp khá nhiều khó
khăn. Tuy nhiên sang đến phiên bản mới (phiên bản hiện tại tôi đang sử dụng là phiên
bản 1.0.7) việc lọc gói tin đã đơn giản hơn khá rất nhiều.
Khi thực hiện việc lọc gói tin thì giao thức hiện tại của Yahoo là giao thức phiên bản
15 (phù hợp với Client là Yahoo Messenger phiên bản 8.13). Trên mạng có một số
miêu tả về giao thức Yahoo phiên bản 9, mới nhất là phiên bản 12. Nhìn chung hai
phiên bản có khá nhiều điểm khác biệt rõ rệt. Tuy nhiên vẫn có một số điểm chung (về
cấu trúc, một số mã dịch vụ vv..).
~ 16 ~
Hình 3. 1: Ảnh chụp màn hình chương trình Wireshark
3.1.1. Sự khác nhau giữa các phiên bản
Giao thức YMSG là giao thức đóng, và mỗi phiên bản của giao thức thì cấu trúc của
gói tin lại bị thay đổi chút ít. Ví dụ với giao thức phiên bản 9 có trường phiên bản giao
thức (version dài 4 byte) trong khi ở giao thức phiên bản 12 thì trường version này chỉ
có độ dài là 2 byte.
Hình 3. 2: Cấu trúc gói tin YMSG phiên bản 12
~ 17 ~
Hình 3. 3: Cấu trúc gói tin YMSG phiên bản 9
Như đã thấy ở hai hình trên, YMSG phiên bản 9[5] và phiên bản 12[6] có sự khác nhau
về cấu trúc gói tin. Tuy cả 2 đều 20 byte tiêu đề nhưng ý nghĩa và vị trí thì có sự khác
biệt.
Đó là chưa kể sự khác nhau về dịch mã dịch vụ cũng như mã trạng thái…
Sự khác nhau này phải qua khá nhiều lần chúng tôi mới nhận thấy được. Vì ban đầu
chúng tôi quyết định viết chương trình với giao thức YMSG phiên bản 15 (trên mạng
vẫn chưa có miêu tả cụ thể về giao thức YMSG phiên bản 15). Tuy nhiên cấu trúc của
YMSG phiên bản 15 lại khác với phiên bản 9 và phiên bản 12. Sau khá nhiều lần bắt
gói tin và phân tích , chúng tôi mới đưa ra kết luận về cấu trúc của gói tin YMSG
phiên bản 15.
3.1.2. Cấu trúc một gói tin của YMSG
Y M S G
2 Byte 2 Byte 2 Byte 2 Byte 2 Byte
Service Status
Version Pkg_len
Session id
DATA
0 - 65535
Hình 3. 4: Cấu trúc gói tin YMSG phiên bản 15
~ 18 ~
Trong hình trên tất cả các trường số đều chứa theo kiểu network byte order
Tiêu đề của một gói tin gồm có 20 byte đầu tiên:
YMSG
4 byte đầu tiên của tất cả các gói luôn là YMSG – tên của giao thức.
Version
2 byte tiếp theo là số phiên bản của giao thức[7]
VD với version 9: 0x00 0x09
Với version 15 là 0x00 0x0F
Pkg_len
Có giá trị 4 byte, cho biết độ dài của dữ liệu trong gói tin.
Service
Là một mã 2 byte báo cho Client/Server biết loại dịch vụ là yêu cầu/ hồi đáp.
Status
Trong trường hợp là hồi đáp của Server, trường status báo cho Client biết yêu cầu là
thành công hay thất bại,... Trong trường hợp là yêu cầu từ Client tới Server thì status
thường bằng 0, …
Session id
Khi Client gửi gói tin đầu tiên thì `là 0, Server hồi đáp với session id được sử dụng bởi
client và Server trong tất cả các gói sau này. Server có thể thay đổi session id, trong
trường hợp này thì Client phải sử dụng session id mới.
DATA
Data section có độ dài là pkg_len và chứa một chuỗi khóa/giá trị. Tất cả khóa là chuỗi
số. Gói chứa giá trị số của các kí tự ASCII. VD: 1 == 0x31, 21 == 0x32 0x31. Số lớn
nhất của khóa là không biết tuy nhiên độ dài lớn nhất của khóa hiện nay là 3 kí tự. Mọi
khóa và giá trị bị ngăn bởi 2 byte liên tiếp là 0xc0 0x80. Một vài khóa có thể có giá trị
rỗng. Nghĩa của một khóa khi gửi được quyết định bởi dịch vụ sử dụng. Hình dưới mô
tả cấu trúc của trường DATA.
~ 19 ~
VD: gói dữ liệu được gửi sẽ như sau:
0x30 0xc080 Yahoo_id 0xc080 0x31 0xc080 active_id 0xc080 0x35
0xc080 recipient_id 0xc080 0x3134 0xc080 message_text 0xc080
0xc080 byte là một chuỗi ngăn cách.
Các giá trị 0x30, 0x31, 0x35 và 0x3134 là các khóa. Chuyển sang mã ASCII sẽ tương
ứng với các giá trị sau: 0, 1, 5, 14 (0x3134 == 0x31 0x34).
3.1.3. Dịch vụ
Có 45 dịch vụ được biết đến trong version 9[8], mặc dù có thể tồn tại nhiều hơn. Tất cả
các dịch vụ được biết đến được liệt kê trong danh sách phía dưới với các giá trị hex
của chúng.
YAHOO_SERVICE_LOGON = 0x01
YAHOO_SERVICE_IDLE = 0x05
YAHOO_SERVICE_USERSTAT = 0x0a
YAHOO_SERVICE_NEWCONTACT = 0x0f
YAHOO_SERVICE_ADDIDENT = 0x10
YAHOO_SERVICE_SYSMESSAGE = 0x14
YAHOO_SERVICE_PASSTHROUGH2 = 0x16
YAHOO_SERVICE_CONFINVITE = 0x18
YAHOO_SERVICE_CONFDECLINE = 0x1a
HEADER ID C080 Data C080
ID C080 Data C080
Hình 3. 5: Cấu trúc trường Data
~ 20 ~
YAHOO_SERVICE_CHATLOGOFF = 0x1f
YAHOO_SERVICE_CHATMSG = 0x20
YAHOO_SERVICE_GAMELOGON = 0x28
YAHOO_SERVICE_GAMEMSG = 0x2a
YAHOO_SERVICE_FILETRANSFER = 0x46
YAHOO_SERVICE_VOICECHAT = 0x4a
YAHOO_SERVICE_NOTIFY = 0x4b
YAHOO_SERVICE_P2PFILEXFER = 0x4d
YAHOO_SERVICE_PEERTOPEER = 0x4f
YAHOO_SERVICE_AUTHRESP = 0x54
YAHOO_SERVICE_LIST = 0x55
YAHOO_SERVICE_AUTH = 0x57
YAHOO_SERVICE_ADDBUDDY = 0x83
YAHOO_SERVICE_REMBUDDY = 0x84
YAHOO_SERVICE_IGNORECONTACT = 0x85
YAHOO_SERVICE_REJECTCONTACT = 0x86
YAHOO_SERVICE_VERIFY =0x4c
3.1.4. Status codes (mã trạng thái)
Mã trạng thái là một giá trị 4 byte. Hầu hết các mã trạng thái có độ dài 2 byte. Các mã
trạng thái:
YAHOO_STATUS_AVAILABLE = 0
YAHOO_STATUS_NOTINOFFICE = 5
YAHOO_STATUS_STEPPEDOUT = 9
YAHOO_STATUS_INVISIBLE = 12
YAHOO_STATUS_CUSTOM = 99
YAHOO_STATUS_IDLE = 999
YAHOO_STATUS_OFFLINE = 0x5a55aa56
YAHOO_STATUS_TYPING = 0x16
~ 21 ~
Có thể chọn AVAILABLE hoặc INVISIBLE là trạng thái ban đầu lúc login vào nick.
TYPING chỉ được sử dụng khi đang gửi 1 gói chú ý.
3.1.5. Session
Một Yahoo session có 2 trạng thái là Authentication và Messaging.
Authentication (xác thực)
Session bắt đầu là trạng thái xác thực. Client gửi username tới cho Server. Server gửi
lại challenge string.
Client băm challenge với password và username thành 2 chuỗi và gửi cho server. Nếu
xác thực thành công kết nối sẽ chuyển sang trạng thái mesaging, ngược lại sẽ gửi hồi
đáp lỗi.
Messaging
Sau khi xác thực thành công, phiên sẽ chuyển sang trạng thái messaging. Server sẽ gửi
lại danh sách bạn bè, danh sách định danh, danh sách ignore và một danh sách cookies
tới client. Tất cả các danh sách này có thể được gửi trong một gói duy nhất. Và sau đó
server sẽ gửi danh sách bạn bè online cùng với mã trạng thái của chúng. Tất cả những
danh sách trên sẽ được gửi mà không cần một yêu cầu nào từ phía Client.
Trong lúc này, mọi offline messages sẽ được gửi tới Client.
Trong trạng thái messaging, Client có thể gửi/ nhận các tin nhắn (messages), tham gia
vào các cuộc thảo luận, gửi/nhận các file, thay đổi trạng thái,…
Trạng thái messaging sẽ kết thúc khi người sử dụng chuyển sang offline và gửi gói
LOGOFF.
3.2. Mô tả chi tiết giao thức YMSG
Tuy có thay đổi theo phiên bản giao thức, nhưng thứ tự thực hiện trong giao thức
YMSG vẫn được giữ nguyên (từ phiên bản 9 đến phiên bản 15) theo Hình 3. 6: Giao
thức YMSG dưới đây:
~ 22 ~
Hình 3. 6: Giao thức YMSG
3.2.1. Verify
Đây là tính hiệu đầu tiên của client (Yahoo Messenger) gửi cho server.
Cấu trúc của gói tin như sau:
4 byte đầu luôn là YMSG
2 byte tiếp là phiên bản 0x000F = 15
4 byte tiếp là độ dài trường DATA (hiện tại bằng 0)
` Y M S G
2 Byte 2 Byte 2 Byte 2 Byte 2 Byte
0x004C 0x00000000
0x000F 0x00000000
0x00000000
Hình 3. 7: Cấu trúc gói tin Verify
~ 23 ~
2 byte tiếp là mã dịch vụ. 0x004C là dịch vụ Verify
4 byte tiếp là mã trạng thái (0x00000000 tương ứng available)
4 byte tiếp là session, lúc này server chưa gửi session
Gói tin hồi đáp từ server
4 byte đầu luôn là YMSG
2 byte tiếp là phiên bản 0x000F = 15
4 byte tiếp là độ dài trường DATA (hiện tại bằng 0)
2 byte tiếp là mã dịch vụ. 0x004C là dịch vụ Verify
4 byte tiếp là mã trạng thái (0x00000001 tương ứng mã trả lời của server)
4 byte tiếp là session, lúc này server chưa gửi session
3.2.2. Xác thực (Authentication )
Gói tin tiếp theo gửi từ Client là gói tin yêu cầu xác thực. Nội dung gói tin gồm có
user’s Yahoo id, hoặc thông tin định danh tới Yahoo id này. Gói xác thực có một cặp
khóa/ giá trị.
Server trả lời lại một challenge string. Client sẽ băm username và password với
challenge string và gửi lại cho Server trong gói tin AUTH_RESP.
` Y M S G
2 Byte 2 Byte 2 Byte 2 Byte 2 Byte
0x004C 0x00000001
0x000F 0x00000000
0x00000000
Hình 3. 8: Gói tin Verify hồi đáp từ Server
~ 24 ~
Và dưới là hình ảnh chụp màn hình gói tin Authentication được bắt bởi chương trình
Wireshark
Hình 3. 10: Ảnh chụp gói tin Authentication
4 byte đầu luôn là YMSG
2 byte tiếp là phiên bản 0x000F = 15
4 byte tiếp là độ dài trường DATA (hiện tại bằng 0x0A = 10)
2 byte tiếp là mã dịch vụ. 0x0057 là dịch vụ Authentication
4 byte tiếp là mã trạng thái (0x00000000)
4 byte tiếp là session, lúc này session chưa có
Trường Data lúc này có 1 cặp key:value
1:yb_v1 (nick yahoo)
Server sẽ trả lời bằng gói tin sau:
Y M S G
2 Byte 2 Byte 2 Byte 2 Byte 2 Byte
0x0057 0x00000000
0x000 0x0000000A
0x00000000
1:yahoo id
Hình 3. 9: Gói tin Authentication
~ 25 ~
Bên dưới là ảnh chụp màn hình gói tin Authentication ACK được bắt bởi chương trình
Wireshark
Hình 3. 12: Ảnh chụp gói tin Authentication ACK
4 byte đầu luôn là YMSG
2 byte tiếp là phiên bản 0x000F = 15
4 byte tiếp là độ dài trường DATA (hiện tại bằng 0x64 = 100)
2 byte tiếp là mã dịch vụ. 0x0057 là dịch vụ Authentication
4 byte tiếp là mã trạng thái (0x000000001 là mã server hồi đáp)
4 byte tiếp là session, 0x00542FCA
Trường Data lúc này có 3 cặp key:value
o 1:yb_v1 (nick yahoo)
o 94:8*p/n+a/z+j^(l-(x/p&p)*4%t&(z/r&… (chuỗi challenge)
o 13:2 (một giá trị vô nghĩa ?)
Y M S G
2 Byte 2 Byte 2 Byte 2 Byte 2 Byte
0x0057 0x00000001
0x000F
0000
0x00000064
0x00542FCA
1:Yahoo id
94: Chuỗi MD5 Challenge
13:2
Hình 3. 11: Gói tin trả lời Authenticaion ACK
~ 26 ~
Sau khi bắt được gói tin AuthenticationACK, sẽ thực hiện việc băm mật khẩu với
chuỗi challenge mà server vừa gửi. Thuật toán băm mật khẩu cũng là một thuật toán
đóng. Rất may là đã có sẵn một thư viện viết về thuật toán này.
Ảnh dưới là gói tin Authentication Response được bắt bởi Wireshark
Hình 3. 14: Ảnh chụp gói tin Authentication Response
4 byte đầu luôn là YMSG
2 byte tiếp là phiên bản 0x000F = 15
4 byte tiếp là độ dài trường DATA (hiện tại bằng 0xB0 = 176)
2 byte tiếp là mã dịch vụ. 0x0054 là dịch vụ Authentication Response
4 byte tiếp là mã trạng thái (0x00000000C)
Y M S G
2 Byte 2 Byte 2 Byte 2 Byte 2 Byte
0x0054 0x0000000C
0x000F 0x000000B0
0x0053BFC3
6: Chuỗi băm mật khẩu 1
96: Chuỗi băm mật khẩu 2
0:Yahoo id
2:1
1:Yahoo id
244:524223
Hình 3. 13: Gói tin Authentication Response
~ 27 ~
4 byte tiếp là session, 0x0053BFC3
Trường Data lúc này có 7 cặp key:value
o 6:A=6p;J=ad;J=8n,X=68,V=7B,V=Em,Z=j6;M=jm;E=A8;L=ae, (giá trị băm
thứ nhất)
o 96:R=hh;h=g0,K=fF,F=9b,W=m9,V=eh,r=59,Q=F3;K=0j,A=pc; (giá trị băm
thứ 2)
o 0:yb_v1
o 2:1 (không hiểu ý nghĩa)
o 1:yb_v1
o 244:524223 (không hiểu ý nghĩa)
o 135:8.1.0.249 (Phiên bản Client. Nếu thay bằng phiên bản client 7.1.0.249 thì
quá trình này cũng không thành công)
o 148:300 (không hiểu ý nghĩa)
Trên thực tế, gói tin Authentication Response có thể chứa nhiều thông tin. Tùy theo
từng phiên bản mà những thông tin gửi kèm là khác nhau. Những thông tin đưa lên
đây là những thông tin bắt buộc phải có, và đủ để cho quá trình đăng nhập thành công.
Có một số trường trong giao thức Yahoo không có ý nghĩa, hoặc mang một ý nghĩa
sâu xa nào đó, tuy nhiên nếu thiếu thì server sẽ từ chối gói tin khi nhận được.
3.2.3. Gửi /nhận tin nhắn
2 Byte 2 Byte 2 Byte 2 Byte 2 Byte
Y M S G
0x0006 0x5A55AA56
0x000F 0x000000B0
0x0053BFC3
1:Yahoo id
5:Yahoo id nhận tin nhắn
14:Nội dung tin nhắn
97:1
63:0
Hình 3. 15: Gói tin Message
~ 28 ~
Ảnh chụp gói tin Message bắt bằng Wireshark
Hình 3. 16: Ảnh chụp gói tin Message
4 byte đầu luôn là YMSG
2 byte tiếp là phiên bản 0x000F = 15
4 byte tiếp là độ dài trường DATA (hiện tại bằng 0x50 = 80)
2 byte tiếp là mã dịch vụ. 0x0006 là dịch vụ Message
4 byte tiếp là mã trạng thái (0x5A55AA56 là trạng thái ẩn)
4 byte tiếp là session, 0x0053BFC3
Trường Data lúc này có 7 cặp key:value
o 1:yb_v1 (nick yahoo )
o 5:ninja_qbonline (nick yahoo người nhận)
o 14:hello world :D (thông điệp)
o 97:1 (không hiểu ý nghĩa )
o 63:;0(không hiểu ý nghĩa )
o 64:0(không hiểu ý nghĩa )
o 1002:1(không hiểu ý nghĩa )
Thực chất của việc hai người chat với nhau đó chính là người thứ nhất gửi tin nhắn
đến server, server gửi lại tin nhắn đó đến người thứ hai và ngược lại. Vì thế gói tin khi
nhận tin nhắn không khác gì lắm so với gói tin lúc gửi tin nhắn (chỉ khác ở trường mã
trạng thái).
3.2.4. Gửi chú ý bắt đầu/dừng việc đánh máy
Khi người dùng gõ vào nội dung chat, Yahoo Client sẽ tự động gửi gói tin báo việc
này về Server. Server sẽ gửi lại Yahoo Client bên kia.
~ 29 ~
Hình 3. 17: Cấu trúc gói tin Notify, Hình 3. 18: Ảnh chụp gói tin Notify được bắt bằng
Wireshark.
3.2.5. Logoff
Mỗi khi có người trong friendlist logoff thì Yahoo Server gửi một gói tin theo định
dạng sau:
Y M S G
2 Byte 2 Byte 2 Byte 2 Byte 2 Byte
0x004b 0x00000016
0x000F
0000
0x00000064
0x0052FCA
4: Yahoo id gửi tin
5: Yahoo id nhận tin
13: 1 hoặc 0 là bắt đầu hay dừng việc đánh máy
14:
49: TYPING
Hình 3. 17: Cấu trúc gói tin Notify
Hình 3. 18: Ảnh chụp gói tin Notify
~ 30 ~
Ảnh chụp gói tin Logoff trên thực tế bằng wireshark.
Hình 3. 20: Ảnh chụp gói tin Logoff
3.2.7. Thêm bạn
Gói tin được gửi tới Yahoo Server khi muốn thêm một người bạn mới vào danh sách
bạn (friendlist) có định dạng như sau:
Y M S G
2 Byte 2 Byte 2 Byte 2 Byte 2 Byte
0x0002 0x00000001
0x000F 0x0000000A
0x0054F22E
1:Yahoo id
Y M S G
2 Byte 2 Byte 2 Byte 2 Byte 2 Byte
0x0083 0x00000000
0x000F
0000
0x00000082
0x005BAE40
65: Nhóm muốn add người bạn này vào
216: Tên
254: Họ
1:Nick yahoo
7:Nick yahoo mình muốn thêm vào
Hình 3. 19: Gói tin Logoff
Hình 3. 21: Cấu trúc gói tin Add Buddy
~ 31 ~
Và dưới là ảnh chụp gói tin Add Buddy được bắt bằng Wireshark
Hình 3. 22: Ảnh chụp gói tin Add Buddy
Khi việc thêm nick Yahoo thành công, Server sẽ gửi trả lại một gói tin thông báo việc
này thành công. Gói tin server gửi về khá giống với gói tin lúc gửi cho server chỉ khác
ở chỗ status của gói tin này là 0x00000001. Trong chương trình Yahoo bot không quan
tâm lắm đến gói tin mà server trả về (trong trường hợp này) chỉ quan tâm đến các gói
tin có service code là 0x0006 (những gói tin message).
3.2.8. Xóa nick trong danh sách bạn
Khi muốn xóa nick nào đó trong friendlist thì cần gửi một gói tin có định dạng như
hình dưới đến server:
Hình dưới là ảnh chụp gói tin Remove Buddy bắt bằng Wireshark
Y M S G
2 Byte 2 Byte 2 Byte 2 Byte 2 Byte
0x0084 0x00000000
0x000F
0000
0x0000002B
0x005BAE40
65: nhóm chưa nick cần xóa
1: Yahoo id
7:Yahoo id bị xóa
Hình 3. 23: Cấu túc gói tin Remove Buddy
~ 32 ~
Hình 3. 24: Ảnh chụp gói tin Remove Buddy
Cũng tương tự như việc thêm một nick vào friendlist, Server cũng sẽ gửi trả lại một
gói tin chỉ khác gói tin gửi cho Server ở mã trạng thái (status code).
3.3. Phân tích thiết kế module Yahoo bot
3.3.1. Ngôn ngữ
Ngôn ngữ mà chúng tôi quyết định chọn là Python[9], một ngôn ngữ thông dịch, dễ
học và dễ viết.
Python là một ngôn ngữ lập trình hướng đối tượng, chạy được trên nhiều hệ điều hành
phổ biến hiện nay như Windows, Linux, Unix, Mac, đơn giản như các shellscript
nhưng thực sự là ngôn ngữ để phát triển ngôn ngữ bậc rất cao (very-high-level-
language).
Python cho phép chia nhỏ chương trình thành các module (tương tự java) mà có thể
chạy độc lập không cần chương trình gốc.
Đây là một ngôn ngữ dạng thông dịch (interpreter language), do vậy không phải tốn
thời gian để biên dịch, liên kết..., mà chỉ viết và chạy.
Cú pháp của Python rõ ràng và ngắn gọn hơn nhiều so với C/C++, được đánh giá là
ngôn ngữ có số lần gõ phím ít nhất khi viết chương trình tương tự với các ngôn ngữ
khác như C/C++, Java ...
Ngôn ngữ Python được phát triển theo GNU, hoàn toàn miễn phí và là mã nguồn
mở. Có nghĩa là có thể dùng Phython để phát triển các ứng dụng mà không cần phải
trả bất kỳ một chi phí nào[10].
~ 33 ~
3.3.2. Cấu trúc của module
Main Program
PkgHandler
Text cmd,
args
YMSG
IM-CMD
-Doit Return
text
Auto_run
Config.txt
cmd(s)
Yahoo! SERVER
…
Internet CSDL
…
..
.. Service
Hình 3. 25: Cấu trúc module Yahoo Bot
~ 34 ~
Module sẽ bao gồm 4 phần chính
YMSG
Thực thi giao thức YMSG, giúp TCat giao tiếp với người sử dụng thông qua Yahoo,
cũng như nhận các thông tin từ họ. Khi đăng nhập thành công. YMSG sẽ gọi
PkgHandler lên.
PkgHandler
Chuyên lắng nghe các yêu cầu từ người sử dụng. Khi có một yêu cầu đến, lập tức phân
tích yêu cầu, gọi ra những module cần thiết.
IM-CMD
Là một giao diện (interface) cung cấp hai hàm chính là doit và auto_run. Các dịch vụ
(ví dụ như nhắc việc, translate, weather) phải thực thi giao diện này. Điều này có nghĩa
là các dịch vụ là những phần nhỏ, có hai hàm doit và auto_run. Tiêu chí để viết các
dịch vụ là càng đơn giản càng tốt. Vì TCat sẽ chạy nhiều dịch vụ khác nhau. Nếu mỗi
dịch vụ đều yêu cầu cấp phát tài nguyên lớn, tốn nhiều băng thông mạng thì TCat sẽ
chạy rất chậm.
Auto_run
Là tiến trình tự động chạy, cung cấp các dịch vụ một cách chủ động (các dịch vụ nhắc
việc, báo thức..).
3.3.3. Tiến trình thực hiện
Chương trình chính khi khởi động sẽ tự động gọi hai đối tượng YMSG và Autorun.
Sau đó tiến trình truyền tham số Y!ID và Y!Password cho YMSG để YMSG đăng
nhập.
Sau khi đăng nhập thành công, YMSG sẽ tự động gọi PkgHandler. PkgHandler sẽ
lắng nghe các gói tin đến, xóa những gói tin không cần thiết, chỉ xử lý các gói tin có
mã là YAHOO_SERVICE_CHATMSG. Sau khi bắt được gói tin, PkgHandler sẽ tiến
hành việc phân tích gói tin dựa vào ký tự .
Ví dụ
/translate en vi hello
Dịch vụ cần gọi là translate. Khi gọi dịch vụ cần cung cấp ba tham số là en vi hello.
~ 35 ~
Dịch vụ được viết sao cho đảm bảo tính đơn giản. Trong dịch vụ phải thực thi giao
diện IMCMD, nói cách khác thì phải có hai hàm đặc biệt là hàm doit và auto_run.
Hàm doit nhận hai tham số chính là chuỗi tham số và nick Yahoo gửi:
def doit (args, sender):
args: chuỗi tham số do người dùng đưa vào
sender: nick Yahoo của người dùng
Hàm doit trả về một chuỗi. PkgHandler sẽ gửi lại cho người yêu cầu nội dung mà
hàm doit trả về thông qua YMSG. Bản thân PkgHandler chỉ lắng nghe các gói tin
đến. Nếu muốn gửi một thông điệp đến người dùng nào đó, PkgHandler phải yêu cầu
YMSG gửi.
Hàm doit từ dữ liệu đầu vào của người dùng, tùy mỗi loại mà có những cách xử lý
khác nhau. Có thể sẽ kết nối CSDL hoặc phân tích các RSS trên Internet để lấy về nội
dung cần trả.
Hàm auto_run là hàm được gọi từ tiến trình Autorun. Tiến trình Autorun sẽ được kích
hoạt trong chương trình chính. Khi khởi động, tiến trình Autorun sẽ đọc file config.txt.
Trong file config.txt này sẽ liệt kê các dịch vụ muốn thực hiện chế độ chạy tự động.
Tiến trình Autorun sẽ lần lượt gọi các dịch vụ này thông qua hàm auto_run(im). (là
một hàm trong giao diện IMCMD). Với im là một thể hiện (instance) của YMSG. Hàm
auto_run của dịch vụ sẽ tự xử lý dữ liệu (bằng nhiều cách) sau đó gửi tin nhắn thông
qua biến im.
Đa phần các dịch vụ cung cấp chế độ chạy tự động (auto_run) đều không tự động xử
lý dữ liệu. Bởi vì nếu tự xử lý dữ liệu thì sẽ rất tốn tài nguyên. Vì vậy, việc xử lý và
lưu trữ dữ liệu đều được thực hiện ở hệ thống bên ngoài (có thể làm một nhà cung cấp
dịch vụ nào đó hoặc tự xây dựng các hàm cung cấp dịch vụ).
~ 36 ~
3.4. Tổng quan giao thức Google Talk
Hình 3. 26 Cấu trúc module Gtalk bot
Main Program
RegisterHandler(
"message",contr
oller)
XMPP
IM-CMD
-Doit
Return text
-Autorun(im)
Auto_run
Config.txt cmd(s)
Talk.Google.Com
Service
Service
Internet CSDL
Controller
Service
Service
~ 37 ~
3.4.1. Các bước kết nối
Google Talk sử dụng giao thức XMPP (Extensible Messaging and Presence Protocol)
để xác thực, trình diễn và nhắn tin. Chỉ cẩn viết một ứng dụng sử dụng giao thức theo
chuẩn XMPP và kết nối đến Server của Google Talk là có thể đăng nhập vào.
XMPP trước kia còn được biết đến với một tên khác là Jabber.
Giao thức XMPP IM được mô tả chi tiết trong RFC 3921 [11].
XMPP cung cấp nhiều thư viện cho hầu hết các ngôn ngữ lập trình hiện nay trong đó
có Python[12].
Để kết nối vào Server Google Talk theo giao thức XMPP thì phải cài tiến hành việc
cài đặt thư viện. Ở đây chúng tôi sử dụng thư viện XMPPPY.
Kết nối đến server Google Talk:
self.conn=xmpp.Client(‘gmail.com’)
conres=self.conn.connect(server=(‘talk.google.com’, 5233) )
Để xác thực:
authres=self.conn.auth(user, password)
Đăng ký sự kiện khi nhận được một message:
self.conn.RegisterHandler("message", self.controller)
trong đó self.controller là một hàm có hai tham số là conn, message.
Để gửi thông điệp:
conn.send(xmpp.protocol.Message(tojid,text))
3.4.2. Cấu trúc module
Ở chương trình chính sẽ sử dụng biến xmpp là một thể hiện của XMPP, khai báo các
tham số cho dùng để đăng nhập. Sau đó gọi hàm
RegisterHandler("message",controller)
~ 38 ~
Hàm này là một hàm đặc biệt của xmpp. Hàm này dùng để đăng ký hàm xử lý sự kiện
khi nhận thông điệp. Ở trên là đăng ký cho hàm controller để xử lý sự kiện nhận thông
điệp.
Hàm controller có cấu trúc như sau:
def controller (self,conn,mess):
Biến conn là Client, dùng để gửi thông điệp conn.send().
Biến mess là thông điệp nhận được. Dùng hàm sau để lấy ra người gửi thông điệp:
text = message.getBody()
user = message.getFrom()
Hàm controller sẽ xử lý các text nhận được từ người dùng, phân tích chuỗi nhập text
mà người dùng gửi đến để tìm ra dịch vụ thích hợp.
Ví dụ
/news vnexpress
Dịch vụ cần gọi là news. Khi gọi dịch vụ cần cung cấp một tham số là vnexpress.
Cũng giống như cấu trúc module Yahoo bot . Dịch vụ được viết sao cho đảm bảo tính
đơn giản. Trong dịch vụ phải thực thi giao diện IMCMD, nói cách khác thì phải có hai
hàm đặc biệt là hàm doit và auto_run. Hàm doit nhận hai tham số chính là chuỗi tham
số và nick Google Talk gửi.
def doit (args, sender):
args: chuỗi tham số do người dùng đưa vào
sender: nick Google Talk của người dùng
Hàm doit trả về một chuỗi. Controller sẽ nhận chuỗi đó sau đó gửi cho người dùng
thông qua biến XMPP. Bản thân Controller không phải là một tiến trình, hoặc một
thread (luồng) đặc biệt, đơn giản chỉ là một hàm bắt sự kiện nhận gói tin mesage.
Hàm doit từ dữ liệu đầu vào của người dùng, tùy mỗi loại mà có những cách xử lý
khác nhau. Có thể sẽ kết nối CSDL hoặc parse các RSS trên Internet để lấy về nội
dung cần trả.
~ 39 ~
Hàm auto_run là hàm được gọi từ tiến trình Autorun. Tiến trình Autorun sẽ được kích
hoạt trong chương trình chính. Khi khởi động, tiến trình Autorun sẽ đọc file config.txt.
Trong file config.txt này sẽ liệt kê các dịch vụ muốn thực hiện chế độ chạy tự động.
Tiến trình Autorun sẽ lần lượt gọi các dịch vụ này thông qua hàm auto_run(im). (là
một hàm trong giao diện IMCMD), với im là một thể hiện (instance) của XMPP. Hàm
auto_run của dịch vụ sẽ tự xử lý dữ liệu (bằng nhiều cách) sau đó gửi tin nhắn thông
qua biến im.
Đa phần các dịch vụ cung cấp chế độ chạy tự động (auto_run) đều không tự động xử
lý dữ liệu. Bởi vì nếu tự xử lý dữ liệu thì sẽ rất tốn tài nguyên. Vì vậy, việc xử lý và
lưu trữ dữ liệu đều được thực hiện ở hệ thống bên ngoài (có thể làm một nhà cung cấp
dịch vụ nào đó hoặc tự xây dựng các hàm cung cấp dịch vụ).
~ 40 ~
CHƯƠNG 4. GIAO DIỆN WEB
4.1. Tổng quan về Web
World Wide Web, gọi tắt là Web hoặc WWW là một không gian thông tin toàn cầu mà
mọi người có thể truy nhập (đọc và viết) qua các máy tính được kết nối với mạng
Internet. Thuật ngữ này thường được hiểu nhầm là từ đồng nghĩa với chính thuật ngữ
Internet. Nhưng Web thực ra chỉ là một trong các dịch vụ chạy trên Internet, chẳng hạn
như dịch vụ thư điện tử, truyền file FTP. Web được phát minh và đưa vào sử dụng vào
khoảng năm 1990, 1991 bởi viện sĩ Viện Hàn lâm Anh Tim Berners-Lee và Robert
Cailliau (Bỉ) tại CERN, Geneva, Switzerland[13].
Các tài liệu trên World Wide Web được lưu trữ trong một hệ thống siêu văn bản
(hypertext), đặt tại các máy tính trong mạng Internet. Người dùng phải sử dụng một
chương trình gọi là trình duyệt web (web browser) để hiển thị siêu văn bản. Người
dùng nhập thông tin tại ô địa chỉ (address), rồi sau đó chương trình sẽ tự động gửi
thông tin đến máy chủ (web server) và hiển thị trên màn hình máy tính của người xem.
Hoạt động truy tìm theo các siêu liên kết thường được gọi là duyệt Web.
Web cung cấp giao diện xử lý đơn giản, việc thiết kế Web cũng không tốn nhiều chi
phí và đặc biệt hiện nay, Web đã trở nên phổ biến trên thế giới và cả ở Việt Nam.
Mục đích của chúng tôi khi xây dựng module Web là cung cấp cho người sử dụng một
giao diện đơn giản, giúp người sử dụng thao tác dễ dàng với TCat. Đồng thời, ứng
dụng Web sẽ đến với người dùng nhanh hơn. Vì đa phần ở máy người sử dụng đều đã
có cài đặt sẵn trình duyệt web, người sử dụng muốn thao tác với TCat, đơn giản chỉ
việc gõ địa trang Web trên thanh địa chỉ.
Thao tác đơn giản, đến với người sử dụng nhanh, chi phí phát triển có thể chấp nhận
được. Các ứng dụng trên web đa phần đều là mã nguồn mở, được sự hỗ trợ của cộng
đồng mã nguồn mở. Vì thế phát triển ứng dụng Web là một trong những chiến lược
quan trọng.
Hơn nữa, theo như phân tích ở chương hai, chúng tôi dùng WEB làm cầu nối giữa các
úng dụng chạy trên Desktop (các dịch vụ của IM, SMS) với CSDL. Vì vậy phần WEB
đóng vai trò rất quan trọng trong TCat.
~ 41 ~
4.2. Ngôn ngữ
Có khá nhiều ngôn ngữ Web phía Server phổ biến hiện này như ASP.NET, JSP,
PHP… Chúng tôi quyết định chọn ngôn ngữ phía Server là PHP.
PHP là một ngôn ngữ lập trình kịch bản hay một loại mã lệnh chủ yếu được dùng để
phát triển các ứng dụng viết cho máy chủ, mã nguồn mở, dùng cho mục đích tổng
quát. PHP rất thích hợp với web và có thể dễ dàng nhúng vào trang HTML. Do được
tối ưu hóa cho các ứng dụng web, tốc độ nhanh, nhỏ gọn, cú pháp giống C và Java, dễ
học và thời gian xây dựng sản phẩm tương đối ngắn hơn so với các ngôn ngữ khác nên
PHP đã nhanh chóng trở thành một ngôn ngữ lập trình web phổ biến nhất thế giới.
Hơn nữa, cộng đồng mã nguồn mở viết bằng PHP là rất rộng lớn. Mã lệnh viết bằng
PHP đơn giản và dễ hiểu, phát triển WEB trên PHP chúng tôi mong nhận được sự hỗ
trợ của cộng đồng mã nguồn mở.
Về cơ sở dữ liệu, chúng tôi quyết định chọn hệ quản trị cơ sở dữ liệu MySQL.
MySQL là hệ quản trị cơ sở dữ liệu mã nguồn mở phổ biến nhất thế giới và được các
nhà phát triển rất ưa chuộng trong quá trình phát triển ứng dụng. MySQL là cơ sở dữ
liệu tốc độ cao, ổn định và dễ sử dụng, có tính khả chuyển, hoạt động trên nhiều hệ
điều hành cung cấp một hệ thống lớn các hàm tiện ích rất mạnh. Với tốc độ và tính bảo
mật cao, MySQL rất thích hợp cho các ứng dụng có truy cập CSDL trên Internet.
MySQL miễn phí hoàn toàn cho nên có thể tải về MySQL từ trang chủ và có nhiều
phiên bản cho các hệ điều hành khác nhau: phiên bản Win32 cho các hệ điều hành
dòng Windows, Linux, Mac OS X, Unix, FreeBSD, NetBSD, Novell NetWare, SGI
Irix, Solaris, SunOS, ...
PHP-MySQL là sự kết hợp rất được ưa chuộng trên thế giới, tính bảo mật khá cao,
chạy ổn định và rất nhanh.
4.3. Thiết kết CSDL
Cơ sở dữ liệu đều được tập trung ở phần WEB
Bảng User gồm các trường
- Id: khóa chính, là định danh của người sử dụng
- Username: Tên đăng nhập
~ 42 ~
- Password: Mật khẩu đăng nhập
- Email: địa chỉ email
- GroupId: Định danh nhóm làm việc
- Money: Số tiền hiện tại trong tài khoản
Bảng FriendList gồm
- ID: định danh.
- Name: tên người bạn.
- YahooNick: nick Yahoo.
- GtalkNick: Nick Gtalk.
- PhoneNumber: Số điện thoại.
- Accept: Đồng ý nằm trong danh sách bạn hay không? Nếu người này đồng ý thì
trường Accept có giá trị là Y hoặc G hoặc F hoặc cả 3 tương ứng với các trường hợp
người này đồng ý trên nick Yahoo, Gtalk hay ở điện thoại
- Owner: Chủ sở hữu.
Bảng Bot gồm
- Id là một chuỗi số xác định định danh của các con bot. Chỉ có các con bot có id
truong này mới được phép hoạt động
- ActiveTime: Thời gian kết nối gần đây nhất, hệ thống sẽ căn cứ vào thời gian
kết nối này để kết luận con bot này hiện có đang online hay không.
Bảng Group
- Id: Định danh
- Group name: Tên nhóm
Bảng GroupACL
- Id: định danh
- GroupId: Định danh của nhóm
- Service code: mã dịch vụ
- Allow: Châp nhận cho truy nhập hay không
~ 43 ~
Bảng Service
- ServiceCode: mã dịch vụ
- Description: Mô tả về dịch vụ
Mối liên hệ của các bảng được thể hiện giống hình dưới:
Hình 4. 1 Mối liên hệ giữa các bảng trong CSDL
Mối quan hệ giữa các bảng
- Mỗi User chỉ thuộc một Group. Một Group có thể có nhiều User.
- Mỗi Friend chỉ thuộc một User. Một User có thể có nhiều Friend.
- Mỗi GroupACL chứa một Service và một Group
Mỗi User sẽ có một trường là GroupId. Đó là định danh của nhóm có User đó.
Mối Friend sẽ có một trường là OwnerId. Đó là định danh của User. Cho biết người
bạn này thuộc User nào.
Group ACL là sự kết hợp của quan hệ nhiều - nhiều giữa 2 bảng Group và Service.
GroupACL đặc trưng cho quyền truy cập của một nhóm vào các dịch vụ. Một nhóm có
thể truy cập vào nhiều dịch vụ và ngược lại, một dịch vụ có thể được nhiều nhóm cho
phép truy cập.
~ 44 ~
4.4. Thiết kế module
Như đã nói ở phần đầu chương hai, Phần WEB là một trong những phần khá quan
trọng, làm nên kết cấu của TCat do các phần IM, hoặc SMS đều có các dịch vụ liên
kết với cơ sở dữ liệu thông qua WEB. Nói một cách khác thì phần WEB chính là cầu
nối giữa các dịch vụ với CSDL chính của TCat. Bởi vậy phần WEB không những
cung cấp một giao diện đồ họa cho các xử lý của người sử dụng mà còn có thêm các
dịch vụ Web tương thích với các dịch vụ được viết bởi SMS hay IM.
Cấu trúc cơ bản của module như sau:
Điểm vào duy nhất là file index.php và index2.php. File index.php đọc biến
action và sẽ load những dịch vụ có tên trùng với biến action nằm trong thư mục
modules. Có một vài dịch vụ đặc biệt như đăng ký nick, đăng nhập được
chuyển ra ngoài. File index2.php được sử dụng cho các dịch vụ liên kết. Các
dịch vụ liên kết truy cập vào file index2.php để tránh các đoạn HTML không
cần thiết.
Thư mục moudules chứa toàn bộ các file dịch vụ sẽ được thực thi. File
index.php sẽ gọi các moudle tùy theo biến action đưa vào. Nếu truy cập trực
tiếp các moudule thì sẽ bị báo lỗi.
Các thư viện được sử nằm trong thư mục lib và gồm có:
o DebugHelper là một thư viện mã nguồn mở dùng để kiểm tra các lỗi
của chương trình. Nếu có một lỗi nào đó (có thể là warning, notice..)
thì DebugHelper sẽ hiển thị số dòng bị lỗi để tiện xử lý. Cơ chế hiện
thị lỗi của DebugHelper giống kiểu của Java, vì vậy giúp quét lỗi dễ
dàng hơn, thuận tiện hơn. Nếu không có DebugHelper thì mỗi lần có
lỗi, php chỉ in ra dòng bị lỗi (mà không in ra quá trình sinh ra lỗi,
điều này khiến việc debug trở nên khó khăn).
o MyDB.php là thư viện do chúng tôi tự viết nên, cung cấp các phương
thức truy nhập CSDL dễ dàng hơn. Chỉ cần tạo ra một đối tượng
MyDB sau đó thực thi một số phương thức có sẵn. Điều này rất tiện
dụng và có hiệu quả cao hơn so với việc viết các hàm kết nối php với
mysql thông thường.
Ví dụ để kết nối:
~ 45 ~
$db = new MYDB($cfg['db.host'], $cfg['db.user'],
$cfg['db.passwd']);
$db->setdb($cfg['db.dbname']);
Để thực hiện một truy vấn dùng:
$db->query(“Select * from User”);
Để lấy kết quả trả về dùng các phương thức sau:
while ($row = $db->getNext()) {
//Các lệnh thực thi trên biến $row
}
o Function.php là thư viện do chúng tôi tự thiết kế nên cung cấp các
hàm giúp quá trình viết code được nhanh hơn. Các hàm được cung
cấp thuộc ba nhóm chính:
Nhóm hàm cung cấp các chức năng xử lý các biến. ví dụ như
các hàm getVar(), postVar() … giúp lấy biến. Để đảm bảo tính
bảo mật thì không nên dùng trực tiếp luôn biến từ $_POST
hay $_GET mà các biến này phải qua xử lý để lấy ra đúng dữ
liệu cần.
Nhóm hàm cung cấp các chức năng về HTML hoặc javascript.
Ví dụ như các hàm jsRedirect() dùng để chuyển trang bằng
javascript.
Nhóm hàm cung cấp các chức năng thao tác trên CSDL: Có
một số thao tác trên CSDL phải thực hiện nhiều lần, hoặc một
số thao tác muốn tổng quát hóa. Ví dụ như các hàm
check_right() dùng để kiểm tra quyền truy nhập của người
dùng với dịch vụ hiện hành.
o User.php là một class do chúng tôi thiết kế nên. Class này cung cấp
các thao tác trên xử lý trên User. Ví dụ như lấy username, password
hay thậm chí có thể lấy các danh sách bạn bè. Class được viết ngắn
gọn, dễ sử dụng và tích hợp.
Vậy làm sao để một dịch vụ khác kết nối đến dịch vụ được cung cấp ở WEB này? Để
làm được điều đó, chúng tôi cung cấp một số chuẩn viết code. Theo các chuẩn này thì
~ 46 ~
việc phát triển hai dịch vụ ở hai bên khác nhau (bên WEB và bên IM,SMS) có thể thực
hiện bởi hai lập trình viên. Chuẩn viết code như sau:
- Biến action có giá trị là tên dịch vụ hiện đang thực thi. Điều này như đã đề cập ở
trên. Trong file dịch vụ, lập trình viên phải tự bắt lấy biến này để biết tên dịch vụ là gì.
- Biến py có giá trị là mã của bên thực hiện nhiệm vụ ở phía IM hoặc SMS. Như thiết
kế CSDL ở chương trên thì chỉ có các con Bot có mã nằm trong bảng BOT mới được
phép yêu cầu dịch vụ. Điều này nhằm hạn chế khả năng mất mát thông tin hoặc rò rỉ
thông tin của khách hàng. Nếu không có số bảo mật này thì mọi người ai cũng có thể
gửi yêu cầu đến WEB. Nếu như vậy, WEB sẽ trả lại các thông tin nhạy cảm, đồng thời
đánh dấu là đã được gửi rồi. Kẻ tấn công sẽ lấy được các thông tin đó còn người sử
dụng sẽ không được con Bot gửi tin nhắn (vì thông tin đã được gửi rồi, nhưng đã bị
người khác bắt).
Ngoài một số chuẩn qui định sẵn thì các lập trình viên ở hai phía có thể thống nhất với
nhau cách một số chuẩn nhận dữ liệu khác nữa.
Các dịch vụ phía IM, SMS kết nối đến WEB đều phải thông qua file index2.php (một
trong hai đầu vào). Thông qua file index2.php chúng tôi đã lược bỏ đi tất cả các đoạn
HTML rườm rà không cần thiết, kết quả trả lại có kiểu plain-text (text thuần túy). Khi
đó các dịch vụ phía IM, SMS không cần lược bỏ các thẻ HTML không cần thiết nữa,
chỉ việc sử dụng dữ liệu luôn.
~ 47 ~
Sơ đồ Hình 4. 2 Sơ đồ cấu trúc module WEB miêu tả cấu trúc của module WEB gồm
các bước như sau:
Với người sử dụng, đầu tiên sẽ vào trang index.php. Trang này sẽ nạp các thư viện cần
thiết trong thư mục lib. Nếu người sử dụng đã có nick (tài khoản) rồi thì không cần
đăng ký lại nữa mà qua quá trình xác thực sẽ đến phần sử dụng các dịch vụ luôn. Còn
trường hợp người sử dụng chưa có nick, họ sẽ phải đăng ký một nick, sau đó mới được
phép sử dụng dịch vụ. Phần xác thực khá quan trọng trong việc phát triển của TCat
sau này. Nếu như có ý tưởng thương mại hóa TCat, phần xác thực phải được chỉnh
sửa sao cho phù hợp. Ví dụ như trong tài khoản của người đó còn bao nhiêu tiền thì
được sử dụng những dịch vụ nào …
Với các dịch vụ phía IM hoặc SMS, đầu tiên sẽ phải vào trang index2.php. Sau đó các
dịch vụ đó phải đưa ra mã số của mình. Phần xác thực sẽ tự động ghi lại thời gian xác
thực và kiểm tra tính đúng đắn của mã số đó. Việc lưu lại thời gian xác thực có ý nghĩa
khá quan trọng. Khi lưu lại thời gian xác thực, WEB sẽ biết được trong khoảng thời
gian t nào đó, có bao nhiêu dịch vụ IM, SMS đã được xác thực. Như vậy có thể kết
luận một cách gần đúng là có bao nhiêu dịch vụ IM, SMS đang online. Điều này có
Index.php
Index2.php
Dịch vụ ..
Dịch vụ ..
Dịch vụ ..
Dịch vụ ..
Đăng ký
Thư viện Xác thực
Thư viện
Thư viện
Hình 4. 2 Sơ đồ cấu trúc module WEB
~ 48 ~
tính quyết định đến việc phân chia dữ liệu nếu như có nhiều module IM, SMS khác
nhau cùng chạy.
Sau khi xác thực thành công thì index2.php sẽ nạp dịch vụ web mà IM, SMS yêu cầu.
Sau đó trả về dữ liệu đã được nén lại.
Phương pháp nén dữ liệu theo kiểu text mà chúng tôi sử dụng là JSON.
JSON là viết tắt của từ JavaScript Object Notation, đó là là một kiểu định dạng dữ
liệu chuyển đổi nhẹ cho máy tính, có tính khả đọc vì là kiểu văn bản text-based, dùng
để biểu diễn các kiểu dữ liệu.
Định dạng JSON được mô tả chi tiết trong RFC 4627 [14] bởi Douglas Crockford. Thực
chất của JSON chính là việc chuyển đổi các định dạng dữ liệu (như một mảng, đối
tượng …) về thành một chuỗi text và tất nhiên có thể khôi phục lại được.
JSON được xây dựng trên hai cấu trúc:
* Là tập hợp của các cặp tên và giá trị (name-value). Trong những ngôn ngữ khác
nhau, đây được coi như là một đối tượng (object), bản ghi (record), cấu trúc (struct), từ
điển (dictionary), bảng băm (hash table), danh sách khoá (keyed list), hay mảng liên
hợp.
* Là một tập hợp các giá trị đã được sắp xếp. Trong hầu hết các ngôn ngữ, JSON
được coi như là một mảng, véc tơ, tập hợp hay là một dãy (sequence).
Đây là một cấu trúc dữ liệu phổ dụng. Hầu như tất cả các ngôn ngữ lập trình hiện đại
đều hổ trợ trong một hình thức nào đó, tạo nên ý nghĩa của một định dạng hoán vị dữ
liệu với các ngôn ngữ lập trình cũng đã được cơ sở hoá trên cấu trúc này. JSON ban
đầu được viết ra để hỗ trợ Ajax trong JavaScript, tuy nhiên tính tiện dụng của JSON
ngày càng được đón nhận. Cụ thể là vào năm 2005 Yahoo đã cung cấp các dịch vụ
dưới chuẩn JSON[15], năm 2006 Google cũng tiếp bước Yahoo cung cấp các dịch vụ
dưới chuẩn JSON (ngoài các dịch vụ theo chuẩn Feed XML)[16].
JSON cung cấp các API cho hầu hết các ngôn ngữ và đã nằm trong thư viện chuẩn của
Python từ phiên bản Python 2.6 (phiên bản Python 2.5 chưa hỗ trợ JSON nên chúng tôi
phải dùng một thư viện ngoài là PyJSON), đồng thời cũng được PHP hỗ trợ từ phiên
bản PHP5.x. Thông tin chính thức của JSON được cập nhập trên trang chủ
~ 49 ~
Lý do chúng tôi sử dụng JSON thay thế cho các chuẩn XML là bởi vì JSON rất đơn
giản. Khi muốn gửi một đối tượng nào đó, chỉ cần dùng hàm json_encode(). Hàm này
trả về một chuỗi text là dữ liệu cần gửi đi. Khi muốn khôi phục lại đối tượng ban đầu,
chỉ cần sử dụng hàm json_decode(). Hàm sẽ trả lại đối tượng như ban đầu. Với hai
ngôn ngữ thông dịch cấp cao là PHP và Python thì sự liên kết này rất tuyệt vời. Nếu
như sử dụng XML thì sẽ khó khăn khi phải parse đoạn XML để lấy dữ liệu, hơn nữa
dữ liệu gửi bằng JSON nhẹ hơn dữ liệu XML.
Để bảo đảm tính an toàn, chúng tôi thiết kế sao cho các module IM, SMS kết nối đến
WEB đều thông qua giao thức HTTPS.
~ 50 ~
CHƯƠNG 5. GIAO DIỆN SMS
5.1. Tổng quan về SMS
5.1.1. Định nghĩa SMS
Dịch vụ nhắn tin ngắn (SMS) là một giao thức viễn thông cho phép gửi các thông điệp
dạng text ngắn (không quá 160 chữ cái), có trên hầu hết các điện thoại di động với khả
năng truyền thông không dây[17].
Mỗi tin nhắn SMS chứa tối đa 140 bytes dữ liệu, vì vậy mỗi tin nhắn chứa:
• 160 kí tự 7-bit GSM được sử dụng (viết tin nhắn tiếng Anh không dấu – Bảng
mã GSM Default Alphabet).
• 70 kí tự 16-bit Unicode UCS-2 được sử dụng (viết tin nhắn tiếng Việt có dấu –
Bảng mã Unicode UCS-2).
Tin nhắn văn bản SMS hỗ trợ được hầu hết ngôn ngữ trên thế giới, hiển thị tốt với mọi
ngôn ngữ được hỗ trợ bởi Unicode, bao gồm tiếng Ả rập, tiếng Trung Hoa, tiếng Nhật
và tiếng Triều tiên,…
Bên cạnh đó, tin nhắn SMS còn chứa dữ liệu nhị phân, do đó có khả năng gửi nhạc
chuông, hình ảnh, danh bạ, hay cấu hình WAP tới một điện thoại di động.
Một lợi thế khác của SMS là một ứng dụng có sẵn của tất cả các điện thoại GSM nên
người sử dụng có thể sử dụng trên bất kì loại điện thoại GSM nào. Không giống như
SMS, các công nghệ khác như WAP hay Java thì không được hỗ trợ trên các loại điện
thoại di động đời cũ.
Dịch vụ GSM được sử dụng bởi hơn hai tỷ người trên 212 quốc gia và vùng lãnh thổ.
Các mạng thông tin di động GSM cho phép có thể roaming với nhau do đó những máy
điện thoại di động GSM của các mạng GSM khác nhau ở có thể sử dụng được nhiều
nơi trên thế giới [18].
Tin nhắn SMS là một công nghệ rất thông dụng. Người Mỹ gửi SMS còn nhiều hơn
gọi điện (trung bình mỗi người gửi 357 tin nhắn/tháng so với 204 cuộc gọi trong quý
II/2008). Cuối năm 2008 đã thấy tổng số người sử dụng tin nhắn lên tới hơn ba tỷ.
Hôm nay 76% của tất cả các thuê bao điện thoại di động trên toàn thế giới sử dụng tin
nhắn SMS. [19]
~ 51 ~
5.1.2. Ưu điểm của SMS
Tin nhắn SMS có thể đọc và gửi bất cứ lúc nào :
Ngày nay hầu hết mỗi người đều có một điện thoại di động và sử dụng thường xuyên,
vì vậy có thể gửi và nhận tin nhắn mọi lúc mọi nơi, bất kể là ở nhà, văn phòng hay trên
xe buýt…
SMS được hỗ trợ trên 100% điện thoại GSM và có thể trao đổi với những mạng
không dây khác :
Mọi điện thoại di động GSM đều hỗ trợ SMS. Mọi người không chỉ có thể trao đổi
SMS với những người sử dụng di động cùng mạng mà còn có thể trao đổi SMS với
những người sử dụng di động của các nhà cung cấp dịch vụ khác trên toàn thế giới.
Tin nhắn SMS có thể được gửi đến một máy điện thoại di động đang tắt :
Không giống như một cuộc điện thoại, mọi người có thể gửi một tin nhắn SMS đến
cho người khác ngay cả khi người nhận không mở điện thoại hay đang ở trong vùng
không phủ sóng. Hệ thống SMS của nhà cung cấp dịch vụ sẽ lưu giữ tin nhắn SMS lại
và sau đó gửi cho người nhận khi điện thoại di động của người nhận được mở hoặc có
sóng trở lại.
Tin nhắn SMS ít gây ồn ào hơn trong khi đang sử dụng điện thoại:
Không giống như một cuộc điện thoại, mọi người không cần đọc hay trả lời một tin
nhắn SMS ngay lập tức. Hơn nữa, viết và đọc tin nhắn SMS không gây bất kỳ tiếng ồn
nào tốt hơn là việc phải chạy ra khỏi một rạp hát hay thư viện để trả lời một gọi điện
thoại.
Tin nhắn SMS là một công nghệ thích hợp cho việc xây dựng những ứng dụng
không dây :
Tất cả điện thoại di động GSM đều hỗ trợ việc gửi tin SMS nên việc xây dựng những
ứng dụng không dây dựa công nghệ SMS sẽ khiến cho số lượng người sử dụng tăng
lên ngày càng cao.
Thứ hai, tin nhắn SMS có khả năng chứa dữ liệu nhị phân bên cạnh dữ liệu văn bản
nên người dùng có thể chuyển nhạc chuông, hình ảnh, danh bạ điện thoại… đến máy
khác.
Thứ ba, tin nhắn SMS cho phép thanh toán thương mại một cách tiện lợi. Đây chính là
các dịch vụ gia tăng dựa trên tin nhắn SMS. Người sử dụng sẽ trả phí cho các tin nhắn
~ 52 ~
với nội dung là những hình ảnh, nhạc chuông mà nhà cung cấp thu phí thông qua các
mã số được gửi trong tin nhắn. Các mã số này được qui định bởi nhà cung cấp và
quảng cáo đến với người sử dụng dịch vụ.
5.2. Gửi tin SMS từ máy tính đến điện thoại di động
Để có thể gửi tin được chúng tôi cần:
SMS Gateway đóng vai trò là cổng kết nối giữa hệ thống dịch vụ với mạng di động,
thực hiện đóng gói nội dung và chuyển giao thức mạng, xử lý các kết nối với SMSC sử
dụng một số giao thức của SMSC như SMPP, CIMD.
SMS Gateway có khả năng xử lý các kết nối đến điện thoại di động và các thiết bị
GSM/GPRS. Để gửi và nhận tin nhắn SMS hoặc các tin nhắn văn bản trên điện thoại
di động hoặc các thiết bị GSM / GPR chỉ cần biết làm thế nào để giao tiếp với SMS
Gateway mà không cần phải biết bất cứ điều gì về các lệnh AT.
SMSC (Sort Message Service Center) được gọi là trung tâm tin nhắn, chịu trách
nhiệm xử lý các thao tác của mạng không dây. Khi tin nhắn được gửi từ điện thoại di
động sẽ đến SMSC đầu tiên. Nhiệm vụ chính của trung tâm tin nhắn là ấn định và
kiểm soát đường đi cho tin nhắn SMS. Nếu người nhận không sẵn sàng (đang tắt máy
chẳng hạn) thì tin nhắn SMS sẽ được giữ lại tại trung tâm và sẽ gửi đi khi người nhận
đã sẵn sàng (bật máy lên lại).
Để có thể sử dụng được dịch vụ SMS cần phải biết số của trung tâm tin nhắn của mạng
đang sử dụng. Mặc định khi lắp SIM của nhà cung cấp dịch vụ điện thoại thì số này đã
được nhập vào. Nhưng trong trường hợp dùng nhiều SIM của các nhà cung cấp khác
nhau có thể xảy ra trường hợp không sử dụng được dịch vụ tin nhắn SMS thì phải
nhập vào số của trung tâm tin nhắn. Số của trung tâm tin nhắn thực chất là một số điện
thoại di động được ghi theo chuẩn quốc tế (vd +849080....).
GSM Modem là một thiết bị có khả năng gửi tin nhắn với tốc độ cao trong mạng
GSM, kết nối qua cổng nối tiếp của máy tính (hoặc là cổng USB với một trình điều
khiển modem). GSM Modem là một modem đặc biệt có thể gắn SIM của các nhà cung
cấp dịch vụ, hoạt động giống như một thuê bao di động. Từ góc nhìn của các nhà cung
cấp dịch vụ thì GSM Modem là một điện thoại di động.
~ 53 ~
Tuy nhiên, GSM Modem cho phép các ứng dụng như NowSMS gửi và nhận tin nhắn
thông qua giao diện modem.
Module SMS là một module của chương trình chúng tôi, để gửi tin nhắn cho người sử
dụng. Để có thể nhắn tin được thì người dùng phải đăng ký tài khoản và nhập những
thông tin cần thiết trên giao diện web của chúng tôi.
SMS Gateway và Module SMS giao tiếp với nhau thông qua giao thức HTTP trên môi
trường Internet.
SMS Gateway và SMSC kết nối với nhau sử dụng giao thức SMPP dựa trên nền
TCP/IP hoặc SMS Gateway kết nối tới GSM Modem.
Hiện nay, có rất nhiều phần mềm làm SMS Gateway. Ví dụ như Kannel, Azsender,
NowSMS,…
Kannel là phần mềm được viết bằng ngôn ngữ lập trình C, có thể xử lý những kết nối
tới SMSC, điện thoại di động và GSM/GPRS modem. Kannel có một interface
HTTP/HTTPS cho việc gửi và nhận tin nhắn SMS. Kannel là một phần mềm miễn phí
nhưng chỉ có thể cài đặt trên hệ điều hành Linux. Cấu hình Kannel phức tạp.
Azsender có hai bản: bản miễn phí và bản thương mại. Nếu sử dụng bản miễn phí thì
tính năng của Azsender sẽ chỉ còn lại rất ít, không cung cấp một giao diện Web cho
người sử dụng. Với bản thương mại của Azsender thì chi phí quá cao tùy theo kịch bản
áp dụng cho mỗi đơn vị/cá nhân, giá từ 10.000.000 VNĐ đến 65.000.000 VNĐ. Hơn
thế nữa Azsender đòi hỏi phải có phần cứng chuyên dụng.
NowSMS là một phần mềm cho phép gửi tin nhắn SMS, MMS; triển khai và phát triển
nhanh chóng cho việc gửi tin SMS, MMS và giải pháp WAP Push. NowSMS có thể dễ
dàng cài đặt thành SMS Gateway, MMS Gateway, WAP Push Proxy Gateway và
trung tâm tin nhắn đa phương tiện MMSC (Multimedia Messaging Center) cho hệ điều
hành Window 2000, XP, Vista hoặc Window Server 2003, 2008. NowSMS còn cung
cấp một giao diện Web dễ dàng kết nối từ máy tính ở xa, yêu cầu một địa chỉ IP tĩnh
cho Server được cài đặt NowSMS.
Do những điều kiện trên chúng tôi lựa chọn phần mềm NowSMS để cài đặt làm SMS
Gateway.
Có hai mô hình để gửi tin SMS được chúng tôi sử dụng trong TCat đó là:
~ 54 ~
SMS Gateway kết nối trực tiếp với SMSC với các thông số đã được đăng ký
với SMSC của Viettel.
SMS Gateway kết nối với SMSC thông qua GSM Modem.
~ 55 ~
5.2.1. SMS Gateway kết nối trực tiếp tới SMSC
Hình 5. 1 SMS Gateway kết nối trực tiếp với SMSC
SMS
Gateway
(NowSMS)
HTTP
Application
Transport
Network
Datalink
Physical
Application
Transport
Network
Datalink
Physical
Module
SMS
Network
Datalink
Physical
Router
INTERNET
Network
Datalink
Physical
Router
INTERNET
SMSC
Viettel
SMPP
~ 56 ~
Hình 5.2 là hình thể hiện Module SMS kết nối với SMS Gateway trên giao thức HTTP
truyền các thông số như số điện thoại người nhận, nội dung tin nhắc,… Khi nhận được
các thông điệp trên SMS Gateway sẽ gửi các thông số đó đến SMSC (ở đây là SMSC của
Viettel) trên giao thức SMPP. Sau đó SMSC sẽ gửi tin nhắn đó đến người nhận trên mạng
di động.
Để cấu hình được SMS Gateway như hình 5.2 hãy xem ở phần phụ lục 7.1.1.
~ 57 ~
5.2.2. SMS Gateway kết nối SMSC thông qua GSM modem
SMSC
SMS
Gateway
(NowSMS)
HTTP
Application
Transport
Network
Datalink
Physical
Application
Transport
Network
Datalink
Physical
Module
SMS
Network
Datalink
Physical
Router
INTERNET
Cáp kết nối
Hình 5. 2 Mô hình gửi tin SMS với SMS Gateway kết nối với SMSC thông qua GSM Modem
~ 58 ~
Trong Hình 5. 2 Mô hình gửi tin SMS với SMS Gateway kết nối với SMSC thông qua
GSM Modem: SMS Gateway kết nối với GSM Modem (là điện thoại di động có chức
năng GSM Modem, có gắn sim của một nhà cung cấp dịch vụ di động) qua cáp kết nối.
Phần cài đặt và cấu hình kết nối trên xin xem phụ lục 7.1.2. GSM Modem kết nối với
SMSC của nhà cung cấp dịch vụ như là một điện thoại bình thường thông qua sóng di
động.
Module SMS của chúng tôi kết nối với SMS Gateway dựa trên giao thức HTTP để gửi
các yêu cầu nhắn tin tới các số điện thoại nào đó, nội dung nhắn tin và nhận các tin nhắn
phản hồi lại.
5.3. Ngôn ngữ
Ngôn ngữ sử dụng để viết module SMS cũng giống như ngôn ngữ viết hai module
Yahoobot và Gtalk bot, chúng tôi quyết định chọn là Python, là một ngôn ngữ dạng thông
dịch (interpreter language), không phải tốn thời gian để biên dịch, liên kết..., chỉ cần viết
và chạy.
Ngôn ngữ Python được phát triển theo GNU, hoàn toàn miễn phí và là mã nguồn mở. Có
thể dùng Phython để phát triển các ứng dụng mà không cần phải trả bất kỳ một chi phí
nào.
Python là một ngôn ngữ lập trình hướng đối tượng, chạy được trên nhiều hệ điều hành
phổ biến hiện nay như Windows, Linux, Unix, Mac, đơn giản như các shellscript nhưng
thực sự là ngôn ngữ để phát triển ngôn ngữ bậc rất cao (very-high-level-language).
Python cho phép chia nhỏ chương trình thành các module (tương tự java) mà có thể chạy
độc lập không cần chương trình gốc.
Cú pháp của Python rõ ràng và ngắn gọn hơn nhiều so với C/C++, được đánh giá là ngôn
ngữ có số lần gõ phím ít nhất khi viết chương trình tương tự với các ngôn ngữ khác như
C/C++, Java ...
~ 59 ~
5.4. Module SMS
5.4.1. Mô hình cấu trúc module
Hình 5. 3 Kết nối của Module SMS với SMS Gateway
Main
program
Sms
Auto_run
Config.txtcmd(s)
Sms
IM-CMD
Auto_run(Sms)
cmd.autorun(Sms)
SMS Gateway
Send(sodt, text)
Service INTERNET
Import Sms
HTTP
MODULE SMS
S rvice Service
~ 60 ~
Main Program
Là chương trình chính chạy đầu tiên.
Import sms từ class SMS
SMS
Là class chuyển gửi các yêu cầu nhắn tin tới SMS Gateway trên giao thức HTTP, đóng
vai trò như là cổng kết nối của Module SMS.
Auto_run
Là một luồng tự động chạy nhận biến sms từ Main program.
Đọc từng dòng của file config.txt lấy ra tên dịch vụ có chế độ tự động chạy.
Gọi hàm cmd.autorun(sms).
IM-CMD
Là một giao diện (interface) cung cấp hàm chính auto_run. Các dịch vụ phải thực thi
giao diện này.
Gửi thông tin về người nhận tin nhắn: số điện thoại, nội dung tin nhắn tới cho class
SMS thông qua hàm send(sodt, text).
Nhacviec
Là một dịch vụ của module sms, truy cập vào Internet lấy dữ liệu, thông tin về người
nhận tin nhắn.
5.4.2. Tiến trình thực hiện
Chương trình chính khi khởi động sẽ tự động Import sms từ đối tượng SMS và
truyền biến này cho Auto_run.
Tiến trình Autorun sẽ được kích hoạt trong chương trình chính. Khi khởi động, tiến
trình Autorun sẽ đọc file config.txt. Trong file config.txt này sẽ liệt kê các dịch vụ
muốn thực hiện chế độ chạy tự động.
Tiến trình Autorun sẽ lần lượt gọi dịch vụ này thông qua hàm autorun(sms). (là một
hàm trong giao diện IMCMD). Với sms là một thể hiện (instance) của SMS. Hàm
~ 61 ~
auto_run của dịch vụ sẽ tự xử lý dữ liệu (bằng nhiều cách) sau đó gửi tin nhắn thông
qua biến sms.
Đa phần các dịch vụ cung cấp chế độ chạy tự động (autorun) đều không tự động xử lý
dữ liệu. Bởi vì nếu tự xử lý dữ liệu thì sẽ rất tốn tài nguyên. Vì vậy, việc xử lý và lưu
trữ dữ liệu đều được thực hiện ở hệ thống bên ngoài (có thể làm một nhà cung cấp dịch
vụ nào đó hoặc tự xây dựng các hàm cung cấp dịch vụ).
~ 62 ~
CHƯƠNG 6. CÁC DỊCH VỤ CUNG CẤP
6.1. Dịch vụ Chấp nhận/ Từ chối
Khi một người nào đó muốn thêm một nick của người khác vào danh sách bạn
(FriendList) của họ (ví dụ người A muốn thêm người B vào danh sách bạn). Một tin
nhắn từ TCat sẽ gửi đến nick của người B. Nội dung tin nhắn yêu cầu người B xác
thực lại thông tin trên. Nếu người B chấp nhận nhận tin nhắn do người A gửi thì người
B gửi lại cho TCat tin nhắn chấp nhận, nếu không muốn thì gửi tin nhắn từ chối.
6.1.1. Thiết kế CSDL
Trong phần thiết kế CSDL của chương bốn có một bảng là Friend. Trong bảng đó có
trường ba trường Accept_Y, Accept_G, Accept_M. Các trường Accept_Y, Accept_G,
Accept_M với ý nghĩa người bạn này có đồng ý nằm trong danh sách bạn hay không?
Nếu người này đồng ý thì trường Accept_Y, Accept_G, Accept_M có giá trị là 1. Ba
trường này tương đương với việc đồng ý trên Yahoo, GoogleTalk, Mobile. Nếu không
đồng ý thì ba trường này sẽ có giá trị là 0. Mặc định giá trị đầu tiên là -1. Điều này có
nghĩa là lần đầu tiên, nếu muốn nhận tin nhắn, người này phải xác nhận (vì ba trường
đều khác 1). Giá trị -1 mang ý nghĩa chưa gửi tin nhắn xác nhận cho các nick đó.
Cơ chế này nhằm mục đích tránh tình trạng spam tin nhắn. Giả sử một kẻ xấu muốn
lợi dụng TCat để spam tin nhắn cho một cá nhân nào đó. Nếu không có cơ chế yêu
cầu chấp nhận hoặc từ chối này thì mục đích của kẻ xấu sẽ thành hiện thực.
Thêm một điều nữa trong bảng Friend, đó là việc một người chỉ được thêm một người
khác vào danh sách bạn một lần. Điều này cũng giúp tránh tình trạng spam tin nhắn.
Hình dưới mô tả mối quan hệ giữa hai bảng Friend và User
~ 63 ~
Hình 6. 1: Mối quan hệ Friend - User
6.1.2. Hoạt động
Dịch vụ này muốn hoạt động tốt thì cần có sự phối hợp giữa các module IM, SMS với
WEB. Cơ chế của việc này như sau.
Các module IM, SMS chạy phía Client tạm gọi là các con bot. Các con bot này cứ
trong một khoảng thời gian t sẽ gửi yêu cầu lấy danh sách các nick cần gửi tin nhắn.
Dịch vụ bên phía Web sẽ kiểm tra CSDL, nếu có bản ghi thỏa mãn (trường accept_y,
accept_g, accept_m tương ứng với ba dịch vụ là Yahoo, GoogleTalk hoặc di động
bằng -1) thì lấy nick tương ứng ra, đưa vào một danh sách. Sau đó gửi trả lại con bot
danh sách đó. Con bot căn cứ vào danh sách nhận được sẽ gửi tin nhắn đến các nick
trong danh sách. Nội dung tin nhắn là việc hỏi người sử dụng có xác nhận hay không.
Theo mô tả trên thì dịch vụ chấp nhận/ từ chối này phải có một hàm auto_run dùng để
kiểm tra các nick chưa được hỏi vì dịch vụ này thuộc dạng chủ động. Người được hỏi
không tương tác trực tiếp với con bot.
Để xác nhận đồng ý nhận tin nhắn, người sử dụng nhắn tin lại với cú pháp sau:
/accept [nick trên web của người gửi]
Ví dụ, một người có nick là user1 trên trang web của TCat muốn thêm một người bạn
có nick yahoo là friend_u1_yahoo. Sau khi thực hiện thao tác thêm bạn trên trang web,
một lát sau thì người bạn có nick yahoo là friend_u1_yahoo sẽ nhận được một lời
nhắn từ TCat yêu cầu xác nhận. Khi đó người có nick friend_u1_yahoo muốn đồng ý,
chỉ cần nhắn lại tin như sau:
/accept user1
~ 64 ~
Cơ chế của việc này như sau, khi nhận được tin nhắn /accept user1. Con bot sẽ phân
tích cú pháp của tin nhắn đó. Dịch vụ được gọi lên là dịch vụ accept và tham số đưa
vào là user1. Con bot sẽ gọi dịch vụ accept trong thư viện dịch vụ tương ứng. Dịch vụ
accept làm nhiệm vụ gửi một thông điệp theo giao thức HTTPS, thông điệp này thông
báo cho WEB biết dịch vụ cần gọi, mã số của con bot và nick của người dùng ra lệnh
thêm bạn. Việc còn lại là ở phía WEB. WEB sẽ thay đổi giá trị trường AcceptX và
trường SendX cho phù hợp sau đó gửi trả lại một thông báo là quá trình thay đổi thành
công hay thất bại.
Quá trình từ chối cũng như vậy. Khi muốn từ chối người có nick friend_u1_yahoo sẽ
gửi một tin nhắn với nội dung sau:
/reject user1
Cơ chế của việc này cũng tương tự như việc accept. khi nhận được tin nhắn /reject
user1. Con bot sẽ phân tích cú pháp của tin nhắn đó. Dịch vụ được gọi lên là dịch vụ
reject và tham số đưa vào là user1. Con bot sẽ gọi dịch vụ reject trong thư viện dịch vụ
tương ứng. Dịch vụ reject làm nhiệm vụ gửi một thông điệp theo giao thức HTTPS,
thông điệp này thông báo cho WEB biết dịch vụ cần gọi, mã số của con bot và nick
của người dùng ra lệnh thêm bạn. Việc còn lại là ở phía WEB. WEB sẽ thay đổi giá trị
trường AcceptX và trường SendX cho phù hợp sau đó gửi trả lại một thông báo là quá
trình thay đổi thành công hay thất bại.
6.2. Dịch vụ Người dùng tự định nghĩa
Sẽ rất tuyệt khi người sử dụng có thể tự tạo dịch vụ của riêng mình chỉ với vài thao tác
nhỏ. Dịch vụ người dùng tự định nghĩa cung cấp cơ chế giúp người sử dụng tạo ra cho
chính họ một dịch vụ đơn giản. Dịch vụ này sẽ có một giao diện phía web giúp người
sử dụng thuận tiện trong việc thêm dịch vụ. Mã của dịch vụ là udef. Dịch vụ này thuộc
kiểu dịch vụ bị động, có nghĩa là chỉ trả lời khi có yêu cầu từ người khác. Thực chất
của dịch vụ này là việc lấy thông tin từ trang web do người dùng cung cấp, vì thế khi
sử dụng dịch vụ này, yêu cầu với người sử dụng là cần có một ít kiến thức lập trình
web. Có thể bằng ngôn ngữ nào cũng được. Và họ phải upload trang web đó lên một
web site nào đó để cho TCat có thể kết nối đến.
~ 65 ~
6.2.1. Thiết kế CSDL
Bảng udef gồm các trường sau
- keywork: từ khóa cho dịch vụ của bạn. Từ khóa là duy nhất và không được trùng,
người sử dụng có thể tạo nhiều dịch vụ, nhưng các dịch vụ phải khác nhau về từ khóa
và phải khác từ khóa của người khác.
- Link: Liên kết cần kết nối tới. Khi tạo một dịch vụ theo kiểu người dùng tự định
nghĩa như thế này. Người sử dụng cần có một liên kết đến trang chứa thông tin của họ.
Hoạt động của dịch vụ này thực chất là việc lấy nội dung từ trang chứa thông tin đó và
trả lại cho người yêu cầu dịch vụ.
- User ID: định danh của người chủ dịch vụ này.
Hình dưới mô tả mối quan hệ giữa hai bảng User và Udef
Hình 6. 2: Mối quan hệ User và Udef
6.2.2. Hoạt động
Khi đăng ký một nick ở WEB, người sử dụng vào phần dịch vụ người dùng để xem
các từ khóa và dịch vụ của mình. Không hạn chế số lượng dịch vụ do một người sử
dụng tạo nên. Vì thế một người sử dụng có thể có rất nhiều dịch vụ và các dịch vụ này
có thể trùng nhau.
~ 66 ~
Khi tạo dịch vụ, người sử dụng cần tìm một từ khóa, từ khóa này phải là duy nhất và
không trùng với ai khác. Tiếp theo, người sử dụng phải cung cấp cho TCat biết liên
kết đến nơi cung cấp thông tin người sử dụng đã đăng ký. Chẳng hạn người sử dụng
muốn tạo một dịch vụ có từ khóa là dichvu và liên kết cung cấp thông tin là
Khi đó người sử dụng cần điền vào ô trống Liên kết
cung cấp thông tin là Để dịch vụ hoạt động hiệu quả
Các file đính kèm theo tài liệu này:
- LUẬN VĂN- XÂY DỰNG HỆ THỐNG DỊCH VỤ GIÁ TRỊ GIA TĂNG TRÊN NỀN DỊCH VỤ NHẮN TIN TỨC THÌ QUA HỆ THỐNG TIN NHẮN TỨC THÌ.pdf