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 74
7.1. Cấu hình NowSMS kết nối trực tiếp tới SMSC của Viettel 75
7.2. Tạo kết nối Giữa NowSMS với GSM Modem 78
TÀI LIỆU THAM KHẢO 79
90 trang |
Chia sẻ: netpro | Lượt xem: 2262 | Lượt tải: 2
Bạn đang xem trước 20 trang 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ì, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
01
0x000F0000
0x00000064
0x00542FCA
1:Yahoo id
94: Chuỗi MD5 Challenge
13:2
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
1:yb_v1 (nick yahoo)
94:8*p/n+a/z+j^(l-(x/p&p)*4%t&(z/r&… (chuỗi challenge)
13:2 (một giá trị vô nghĩa ?)
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.
Y M S G
2 Byte
2 Byte
2 Byte
2 Byte
2 Byte
0x0054
0x0000000C
0x000F0000
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
135:8.1.0.249 (phiên bản Yahoo client)
148:300
Hình 3. 13: Gói tin Authentication Response
Ả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)
4 byte tiếp là session, 0x0053BFC3
Trường Data lúc này có 7 cặp key:value
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)
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)
0:yb_v1
2:1 (không hiểu ý nghĩa)
1:yb_v1
244:524223 (không hiểu ý nghĩa)
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)
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
Hình 3. 15: Gói tin Message
2 Byte
2 Byte
2 Byte
2 Byte
2 Byte
Y M S G
0x0006
0x5A55AA56
0x000F0000
0x000000B0
0x0053BFC3
1:Yahoo id
5:Yahoo id nhận tin nhắn
14:Nội dung tin nhắn
97:1
63:0
64:0
1002:1
Ả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
1:yb_v1 (nick yahoo )
5:ninja_qbonline (nick yahoo người nhận)
14:hello world :D (thông điệp)
97:1 (không hiểu ý nghĩa )
63:;0(không hiểu ý nghĩa )
64:0(không hiểu ý nghĩa )
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.
Y M S G
2 Byte
2 Byte
2 Byte
2 Byte
2 Byte
0x004b
0x00000016
0x000F0000
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. 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.
Hình 3. 18: Ảnh chụp gói tin Notify
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:
Hình 3. 19: Gói tin Logoff
Y M S G
2 Byte
2 Byte
2 Byte
2 Byte
2 Byte
0x0002
0x00000001
0x000F0000
0x0000000A
0x0054F22E
1:Yahoo id
Ả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:
Hình 3. 21: Cấu trúc gói tin Add Buddy
Y M S G
2 Byte
2 Byte
2 Byte
2 Byte
2 Byte
0x0083
0x00000000
0x000F0000
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
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 3. 23: Cấu túc gói tin Remove Buddy
Y M S G
2 Byte
2 Byte
2 Byte
2 Byte
2 Byte
0x0084
0x00000000
0x000F0000
0x0000002B
0x005BAE40
65: nhóm chưa nick cần xóa
1: Yahoo id
7:Yahoo id bị xóa
Hình dưới là ảnh chụp gói tin Remove Buddy bắt bằng Wireshark
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[[] Xem thêm Python tại
], 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[[] Theo
].
3.3.2. Cấu trúc của module
Main Program
PkgHandler
Text à cmd, args
YMSG
IM-CMD
-Doit àReturn text
-Autorun(im)
Auto_run
Config.txt à cmd(s)
Yahoo! SERVER
…
Internet
CSDL
…
..
..
Service
Hình 3. 25: Cấu trúc module Yahoo Bot
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.
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ụ).
3.4. Tổng quan giao thức Google Talk
Main Program
RegisterHandler("message",controller)
XMPP
IM-CMD
-Doit àReturn text
-Autorun(im)
Auto_run
Config.txt à cmd(s)
Talk.Google.Com
Service
Service
Internet
CSDL
Controller
Service
Service
Hình 3. 26 Cấu trúc module Gtalk bot
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 [[] Xem rfc 9320 tại:
].
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[[] Xem các thư viện cung cấp tại
].
Để 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)
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ả.
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ụ).
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[[] Theo wikipedia
].
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.
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
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
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.
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ó:
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).
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:
$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
}
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.
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ì 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.
Hình 4. 2 Sơ đồ cấu trúc module WEB
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
Sơ đồ Hình 4. 2 Sơ đồ cấu trúc modul
Các file đính kèm theo tài liệu này:
- 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ì.doc