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ì - Trương Lê Thành: ĐẠ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
HÀ NỘI - 2009
ĐẠ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ô...
90 trang |
Chia sẻ: hunglv | Lượt xem: 1048 | 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ì - Trương Lê Thành, để 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
HÀ NỘI - 2009
ĐẠ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
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 13
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 17
Hình 3. 5: Cấu trúc trường Data 19
Hình 3. 6: Giao thức YMSG 22
Hình 3. 7: Cấu trúc gói tin Verify 22
Hình 3. 8: Gói tin Verify hồi đáp từ Server 23
Hình 3. 10: Ảnh chụp gói tin Authentication 24
Hình 3. 9: Gói tin Authentication 24
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 25
Hình 3. 14: Ảnh chụp gói tin Authentication Response 26
Hình 3. 13: Gói tin Authentication Response 26
Hình 3. 15: Gói tin Message 27
Hình 3. 16: Ảnh chụp gói tin Message 28
Hình 3. 17: Cấu trúc gói tin Notify 29
Hình 3. 18: Ảnh chụp gói tin Notify 29
Hình 3. 20: Ảnh chụp gói tin Logoff 30
Hình 3. 19: Gói tin Logoff 30
Hình 3. 21: Cấu trúc gói tin Add Buddy 30
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 31
Hình 3. 24: Ảnh chụp gói tin Remove Buddy 32
Hình 3. 25: Cấu trúc module Yahoo Bot 33
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 47
Hình 5. 1 SMS Gateway kết nối trực tiếp với SMSC 55
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 57
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 74
Hình 7. 2 Lựa chọn kết nối tới SMSC 75
Hình 7. 3 Cấu hình kết nối 76
Hình 7. 4 Chạy dịch vụ 77
Hình 7. 5 Kết nối tới modem 78
Hình 7. 6 Lựa chọn thiết bị GSM để kết nối 78
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,…
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.[[] Theo
]
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.
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.
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.
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.
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 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.
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.
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 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ì đó.
WEB
CSDL
WService
WService
WAService
Giao Diện
I
PyService
PyService
PyService
PyService
YahooBot
GTalkBot
SMSBot
Internet
WService
CSDL
CSDL
CSDL
Hình 2. 1: Mô hình tổng quan
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ế.
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
Hình 2. 2 Biểu đồ ngữ cảnh hệ thống
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ả
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.
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.
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[[] Theo wikipedia
]. Ở 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[[] Theo giao thức YMSG phiên bản 12. Tham khảo tại
]. 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[[]
]. 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..).
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
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[[] Giao thức phiên bản 9 xem tại
] và phiên bản 12[[] Giao thức phiên bản 12 xem tại
] 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
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[[] Xem thêm phần sự khác nhau giữa các phiên bản giao thức YMSG để biết thêm
]
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.
HEADER
ID
C080
Data
C080
ID
C080
Data
C080
Hình 3. 5: Cấu trúc trường Data
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[[] Theo
], 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
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
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:
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:
`
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
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 (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
Hình 3. 8: Gói tin Verify hồi đáp từ Server
`
Y M S G
2 Byte
2 Byte
2 Byte
2 Byte
2 Byte
0x004C
0x00000001
0x000F
0x00000000
0x00000000
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.
Hình 3. 9: Gói tin Authentication
Y M S G
2 Byte
2 Byte
2 Byte
2 Byte
2 Byte
0x0057
0x00000000
0x000F
0x0000000A
0x00000000
1:yahoo id
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:
Hình 3. 11: Gói tin trả lời Authenticaion ACK
Y M S G
2 Byte
2 Byte
2 Byte
2 Byte
2 Byte
0x0057
0x00000001
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 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ó 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 [[] Xem RFC 4627 tại
] 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[[] Theo
], 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)[[] Theo
].
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ủ
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.
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[[]
].
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 [[]
].
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. [[]
]
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 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.
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à:
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.
5.2.1. SMS Gateway kết nối trực tiếp tớ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
Hình 5. 1 SMS Gateway kết nối trực tiếp với SMSC
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.
5.2.2. SMS Gateway kết nối SMSC thông qua GSM modem
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
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
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 ...
5.4. Module SMS
5.4.1. Mô hình cấu trúc module
Main program
Sms
Auto_run
Config.txtàcmd(s)
Sms
IM-CMD
Auto_run(Sms)
cmd.autorun(Sms)
SMS Gateway
Send(sodt, text)
Service
INTERNET
Import Sms
HTTP
MODULE SMS
Service
Service
Hình 5. 3 Kết nối của Module SMS với SMS Gateway
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 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ụ).
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
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
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.
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.
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ả thì hệ thống cho phép hai bên tương tác với nhau qua các tham số. Các tham số này đề nằm trên giao thức http có kiểu GET cụ thể như sau
Sender: cho biết nick người yêu cầu dịch vụ.
Text: cho biết chuỗi người yêu cầu dịch vụ nhập vào.
Như vậy việc phân tích các tham số truyền vào người sử dụng phải tự thực hiện ở file service.php của họ. Ví dụ cụ thể như sau, khi người yêu cầu dịch vụ yêu cầu dịch vụ dichvu với tham số là hello world
/udef dichvu hello word
TCat sẽ gửi yêu cầu kết nối đến liên kết lấy thông tin
Dịch vụ hoạt động như thế nào? Khi người yêu cầu dịch vụ gửi yêu cầu /udef dichvu hello world. Các module IM, SMS chạy phía client (tạm gọi là các con bot) sẽ nhận được tin nhắn trên. Sau khi phân tích cú pháp của tin nhắn, con bot biết được dịch vụ yêu cầu là udef. Con bot sẽ gửi yêu cầu đến phía web thông qua giao thức HTTPS kèm theo một số tham biến như tên dịch vụ, mã số của con bot, nick gửi yêu cầu, từ khóa và text. Lúc này, WEB sẽ đọc từ CSDL ra liên kết lấy thông tin, tiếp theo web kết nối đến liên kết đó để lấy thông tin. Tất cả các thông tin lấy được WEB trả lại cho con bot. Con bot trả lời người yêu cầu dịch vụ bằng nội dung của thông tin đó.
Ở đây xuất hiện một điểm cần lưu ý. Việc Web kết nối đến liên kết thông tin hay WEB chỉ trả lại liên kết thông tin cho con bot là tốt nhất? Điều này không thể trả lời một cách ngắn gọn được mà phải tùy theo từng trường hợp cụ thể. Tuy nhiên theo tiêu chí của hệ thống là viết các dịch vụ càng đơn giản càng tốt, vì thế chúng tôi quyết định cho WEB đọc thông tin từ liên kết thông tin. Và cũng do thời gian có hạn nên chúng tôi chưa thống kê được hai phương pháp kết nối trên thì phương pháp nào tối ưu hơn. Tuy nhiên xét về tính bảo mật thì khi xử lý thông tin trên WEB trước, sau đó thông tin được mã hóa và truyền theo giao thức HTTPS xuống Client, việc này an toàn hơn so với việc chúng ta gửi trang lấy tin cho con bot. Nếu gửi trang lấy tin cho con bot thì sẽ không an toàn trong vấn đề bảo mật, vì khi thông tin đến được con bot. Con bot sẽ mở một kết nối đến trang web nhận được. Hacker có thể bắt gói tin và biết được địa chỉ trang web đó, ngoài ra hacker còn có thể làm sai lệch DNS, khiến cho con bot kết nối đến một trang web khác trong khi vẫn cứ tưởng mình kết nối đúng trang web. Vì thế, chúng tôi tạm thời sử dụng phương pháp cho WEB kết nối đến liên kết thông tin do người sử dụng cung cấp.
6.3. Dịch vụ Phiên dịch
Dịch vụ phiên dịch hay còn gọi là translate, đây 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.
Khi người sử dụng muốn dịch một đoạn văn bản nào đó, người sử dụng gửi tin nhắn sau đến con bot. Cấu trúc tin nhắn
/translate [ngôn ngữ hiện tại] [ngôn ngữ muốn chuyển đến] [đoạn văn bản muốn dịch]
Con bot sẽ phân tích cú pháp của tin nhắn gửi, sau đó gọi dịch vụ Phiên dịch. Dịch vụ này sẽ kết nối đến trang web translate của Google, đưa các tham số theo giao thức HTTP, sau đó nhận lại một đoạn văn bản. Con bot lúc này sẽ phân tích đoạn văn bản này bằng hàm json_encode(), lấy được các thông tin cần thiết sau đó trả về người sử dụng.
Ví dụ khi người dùng gõ lệnh:
/translate en vi hello world
Con bot gọi dịch vụ Phiên dịch lên, truyền tham số bao gồm: ngôn ngữ hiện tại là Tiếng Anh (có mã là en), ngôn ngữ muốn chuyển là tiếng Việt (có mã là vi), đoạn văn bản là hello world. Sau đó, con bot kết nối đến trang web cung cấp dịch vụ translate của Google là sau đó truyền các tham số sau.
Values = {'client' : 't', 'text' : 'hello world','sl' : 'en','tl' : 'vi'}
GoogleTranslate sẽ trả về cho con bot một đoạn văn bản được mã hóa theo JSON. Dùng hàm json_encode() sẽ biến đoạn văn bản đó trở thành một mảng có cấu trúc như sau.
- Nếu đoạn văn bản sau khi encode có kiểu là ký tự thì đó chính là chuỗi mà ta cần.
- Nếu đoạn văn bản sau khi encode có kiểu mảng sẽ có cấu trúc như sau
[dịch nghĩa],[[giải thích],[ giải thích]]
Trong đó phần giải thích có cấu trúc như sau:
[khóa] ,[ý nghĩa 1] ,[ý nghĩa 2] ,..,[ý nghĩa n]
6.4 Dịch vụ Thời tiết
Dự báo thời tiết là một dịch vụ hay và cần thiết. Trên mạng cũng có một số trang web cung cấp dịch vụ dự báo thời tiết miễn phí. Dịch vụ dự báo thời tiết của chúng tôi sử dụng lại dịch vụ miễn phí của Yahoo là Yahoo Weather.
Khi người sử dụng muốn xem thời tiết của một khu vực nào đó, chỉ cần nhắn tin cho con bot với cấu trúc sau.
/weather [tên khu vực]
Con bot sẽ phân tích cú pháp của tin nhắn gửi, sau đó gọi dịch vụ weather. Dịch vụ này sẽ kết nối đến trang web Yahoo Weather, đưa các tham số theo giao thức HTTP, sau đó nhận lại một đoạn văn bản XML. Con bot lúc này sẽ phân tích đoạn văn bản này bằng, lấy được các thông tin cần thiết sau đó trả về người sử dụng.
Một bài toán khó đặt ra trong trường hợp này là việc YahooWeather lấy khu vực theo mã. Chẳng hạn Hà Nội thì có mã là VMXX0006. Nếu bắt người sử dụng nhớ mã này thì không hay. Vì thế, chúng tôi quyết định chỉ cung cấp dịch vụ dự báo thời tiết trong khu vực Việt Nam. Chúng tôi lập ra một bảng gồm hai trường (khóa và giá trị). Khóa tương ứng với tên tỉnh, thành phố. Giá trị tương ứng với mã tỉnh, thành phố đó (theo qui ước của Yahoo).
Ví dụ khi người dùng gõ lệnh:
/weather HaNoi
Con bot gọi dịch vụ Thời tiết lên, truyền tham số là mã thành phố ứng với tên thành phố. Sau đó, con bot kết nối đến trang web cung cấp dịch vụ YahooWeather,
Hai tham số p là mã thành phố và u là nhiệt độ được tính theo độ C. Yahoo sẽ trả lại một văn bản XML ghi đầy đủ thông tin thời tiết (sức gió, nhiệt độ, áp suât, dự báo ..). Công việc của con bot là phân tích văn bản XML, trả lại những thông tin cần thiết cho người dùng.
6.5. Dịch vụ Nhắc việc
6.5.1. Tổng quan
Để có thể sử dụng được dịch vụ thì người sử dụng phải có một tài khoản đã đăng ký với TCat (username) trên giao diện Web của chúng tôi. Nếu như người sử dụng chưa có tài khoản thì có thể đăng ký một tài khoản để sử dụng dịch vụ.
Dịch vụ nhắc việc là 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ó thay đổi,…
Thời điểm người sử dụng đăng ký nhận tin nhắn có thể là một thời gian cố định nào đó (ví dụ thời gian là 2h00 ngày 30 tháng 2 năm 2010), hoặc cũng có thể là thời gian nào đó trong một ngày (ví dụ 8h hàng ngày). Một trang Web thay đổi ví dụ như khi có một bài viết trả lời mới trong diễn đàn, giá chứng khoán thay đổi, giá vàng, ngoại tệ thay đổi. Khi những sự kiện như trên xảy ra thì chúng tôi sẽ gửi tin nhắn nhắc việc tới người sử dụng.
Dịch vụ nhắc việc giúp cho người sử dụng không cần thiết phải nhớ lịch làm việc, lịch hẹn, vui chơi, sinh nhật của một ai đó,.. Chỉ cần người sử dụng đăng ký những thông tin cần thiết cho TCat. Và khi đến thời điểm mà người sử dụng yêu cầu nhắn tin tới nick Yahoo, GoogleTalk hoặc số điện thoại thì chúng tôi sẽ gửi tin nhắn tới với nội dung mà người sử dụng đã đăng nhập. Không chỉ có thể nhắn tin cho mình, người sử dụng có thể nhắn tin cho bất kỳ một ai đó ví dụ như bạn bè, người thân hoặc đồng nghiệp,…Để có thể nhắn tin cho người khác, có thể là một hoặc nhiều người với nhiều nick Yahoo, GoogleTalk hoặc số điện thoại, người sử dụng phải nhập những thông tin cần thiết cho chúng tôi.
Để có thể nhắn tin cho nhiều người một cách dễ dàng, thuận tiện hơn chúng tôi thiết lập một danh sách bạn bè (Friend List) cho người sử dụng dễ quản lý. Khi muốn nhắn tin cho ai đó, người sử dụng không cần phải nhớ nick Yahoo, GoogleTalk hay số điện thoại của người đó mà chỉ cần nhớ tên để thêm vào danh sách người nhận tin nhắn.
Dịch vụ nhắc việc của chúng tôi chia ra làm hai loại dịch vụ nhỏ:
Thứ nhất: dịch vụ nhắc việc theo thời gian. Tức là tin nhắn nhắc việc mà người sử dụng đăng ký chỉ được gửi vào một thời gian cố định mà người sử dụng đã đăng ký với dịch vụ của chúng tôi. Người sử dụng muốn sử dụng dịch vụ này phải nhập các thông tin cần thiết như nội dung tin nhắn, danh sách người nhận tin nhắn, thời gian cụ thể (giờ-phút-ngày-tháng-năm) cho chúng tôi.
Thứ hai: dịch vụ nhắc việc theo sự thay đổi của trang web. Tức là tin nhắn nhắc việc sẽ được tự động gửi đến cho người sử dụng khi có một sự kiện xảy ra. Sự kiện này đã được người sử dụng đăng ký trước, khi trang Web bị thay đổi. Để kích hoạt dịch vụ này người sử dụng phải nhập các thông tin về người nhận, thời gian hoặc một đường link (của trang web khi có thay đổi) trong giao diện Web của chúng tôi.
6.5.2. Thiết kế CSDL
Như phân tích ở phần trên, chúng tôi cung cấp hai loại dịch vụ nhắc việc. Nhắc việc theo một thời gian và nhắc việc theo sự biến đổi của trang web. Hình 6. 3: Mối quan hệ CSDL trong dịch vụ nhắc việc theo thời gian miêu tả chi tiết mối quan hệ cũng như các trường, các bảng trong dịch vụ nhắc việc theo thời gian
Hình 6. 3: Mối quan hệ CSDL trong dịch vụ nhắc việc theo thời gian
Bảng Nhacviecttg (nhắc việc theo thời gian) gồm có các trường
Nvid: định danh của một tiến trình nhắc việc.
Userid: tiến trình nhắc việc này thuộc về người có định danh này.
Text: thông điệp gửi mỗi khi tiến trình chạy.
Alert_time: thời điểm chạy.
Repeat: Có lặp lại nhắc việc theo ngày hay không?
Sended: đã gửi thông điệp đi chưa.
Bảng Nvttg_Friend là kết quả của việc nối hai bảng Friend với bảng Nhacviecttg theo quan hệ nhiều – nhiều.
Nvid : định danh của tiến trình nhắc việc
Friendid: định danh của một Friend
Send_y, send_g, send_m: đã gửi tin nhắn cho yahoo, GoogleTalk hay điện thoại chưa
Mối quan hệ giữa các bảng như sau: Mỗi Friend có thể nằm trong nhiều Nhacviecttg và mỗi Nhacviecttg có thể chứa nhiều Friend. Quan hệ giữa Nhacviecttg và Friend là quan hệ nhiều - nhiều nên phải sinh ra thêm một bảng nữa là Nvttg-Friend. Lấy một ví dụ cụ thể, một người dùng có Username là A đăng ký dịch vụ. Anh ta thêm vào trong danh sách bạn của mình 2 người có tên là A1 và A2. A muốn tạo một lịch nhắc việc vào buổi sáng 8h của các ngày, nhắc A1 uống thuốc. Khi đó bảng nhắc việc theo thời gian sẽ như sau:Nvid: 123 (một số nào đó), Userid: 82 (định danh của người dùng A), Text: Dậy uống thuốc, alert_time: 2009-06-01 08:00, repeat: 1, sended: 0. Bảng Nvttg-Friend sẽ có dạng như sau: nvid: 123 (định danh của tiến trình nhắc việc trên), friendid:4325 (định danh của A1), send_y: 0, send_g: 0, send_m: 0.
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
Hình trên mô tả mối quan hệ các bảng trong dịch vụ nhắc việc theo sự thay đổi của một trang web. Bảng NhacviecLinkFriend là bảng sinh ra bởi mối quan hệ nhiều – nhiều giữa hai bảng NhacviecLink và Friend.
NhacviecLink gồm các trường:
Nvid: định danh của một tiến trình nhắc việc.
Userid: tiến trình nhắc việc này thuộc về người có định danh này.
Text: thông điệp gửi mỗi khi tiến trình chạy.
Link: Liên kết đến trang web cần theo giỏi.
Sended: đã gửi thông điệp đi chưa.
Bảng NhacviecLinkFriend là kết quả của mối quan hệ nhiều – nhiều giữa hai bảng NhacviecLink và Friend. Gồm các trường sau
Nvid : định danh của tiến trình nhắc việc
Friendid: định danh của một Friend
Send_y, send_g, send_m: lưu lại kết quả băm của trang web lần cuối cùng được gửi đi.
Mối quan hệ của hai bảng này cũng tương đương mối quan hệ của hai bảng Nhacviecttg và Friend.
6.5.3 Hoạt động
Khi người sử dụng tạo một tiến trình nhắc việc trên web, tùy theo người sử dụng chọn, có thể đó là tiến trình nhắc việc theo sự thay đổi của trang web hoặc nhắc việc theo thời gian cụ thể nào đó hoặc cả hai. Với tiến trình nhắc việc theo sự thay đổi của một trang web nào đó, người sử dụng phải điền địa chỉ trang web vào. Địa chỉ trang web phải đặc trưng cho sự thay đổi của trang web, thông thường đó là một link RSS Fed. Với tiến trình nhắc việc theo sự thay đổi của thời gian, người sử dụng phải điền vào thời gian cụ thể. Chọn chế độ có lặp lại việc này theo ngày hay không.
Sau khi người sử dụng lưu lại tiến trình nhắc việc. Các chương trình ở phía moudle IM, SMS (tạm gọi là các con bot) sẽ tiến hành kết nối đến WEB, lấy các thông tin nhắc việc. Việc kết nối này là hoàn toàn tự động và được thực hiện có chu kỳ (cứ t giây sẽ thực hiện). WEB sẽ xem trong CSDL của mình, ứng với mỗi dịch vụ nhắc việc có bao nhiêu nick cần được nhắc việc, có bao nhiêu con bot đang chạy. WEB thực hiện việc chia đều các nick cần được nhắc việc, sau đó gửi trả lại cho con bot một tập các nick cần nhắc việc kèm theo lời nhắn. Dữ liệu truyền tới con bot là dữ liệu được encode theo chuận JSON. Con bot sau khi decode dữ liệu, lấy ra được tập các nick và lời nhắn sẽ gửi thông điệp lần lượt đến các nick.
Vấn đề bảo mật rất quan trọng trong tiến trình nhắc việc. Mọi kết nối đến Ser
Các file đính kèm theo tài liệu này:
- Truong Le Thanh_K50MMT_Khoa luan tot nghiep dai hoc.doc