Ngày nay, ứng dụng công nghệ và việc tin học hóa được xem là một trong những yếu tố mang tính quyết định trong hoạt động của các chính phủ, tổ chức, cũng như của các công ty, nó đóng vai trò hết sức quan trọng, có thể tạo ra những bước đột phá mạnh mẽ. Với sự phát triển ngày càng nhanh chóng này của xã hội thì việc phát triển hệ thống mạng lưới thông tin là một điều kiện tiên quyết.Và khi hệ thống mạng lưới thông tin được phủ sóng rộng rãi, chúng ta chắc chắn sẽ thực hiện được nhiều công việc, truyền thông tin, dữ liệu với tốc độ nhanh hơn và chi phí thấp hơn nhiều so với cách thức truyền thống.
Trang 1TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI
KHOA ĐIỆN - ĐIỆN TỬ
BỘ MÔN KỸ THUẬT VIỄN THÔNG
-ĐỒ ÁN TỐT NGHIỆP
NGHIÊN CỨU PHÁT TRIỂN ỨNG DỤNG CHAT CHO HỆ THỐNG THÔNG TIN DI ĐỘNG
Sinh viên thực hiện: Mai Tuấn ViệtLớp:
Khóa:Kỹ thuật viễn thông
56Giáo viên hướng dẫn: TS Trần Hoài TrungGiáo viên hướng dẫn: TS Trần Hoài Trung
Trang 2TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI
KHOA ĐIỆN - ĐIỆN TỬ
BỘ MÔN KỸ THUẬT VIỄN THÔNG
Trang 3BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC GTVT
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập - Tự do - Hạnh phúc
NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP
BỘ MÔN KỸ THUẬT VIỄN THÔNG
KHOA ĐIỆN - ĐIỆN TỬ
Trang 4LỜI CAM ĐOAN
Cam đoan không sao chép từ các đồ án, luận văn khác Các nội dung, dữ liệu tham khảo đều đã được trích dẫn đầy đủ …
Người cam đoan
Mai Tuấn Việt
Trang 5LỜI NÓI ĐẦU
Trang 6I Tính cấp thiết của đề tài:
Ngày nay, ứng dụng công nghệ và việc tin học hóa được xem là một trong những yếu tố mang tính quyết định trong hoạt động của các chính phủ, tổ chức, cũng như của các công ty, nó đóng vai trò hết sức quan trọng, có thể tạo ra những bước đột phá mạnh mẽ Với sự phát triển ngày càng nhanh chóng này của xã hội thì việc phát triển hệ thống mạng lưới thông tin là một điều kiện tiên quyết.Và khi hệ thống mạng lưới thông tin được phủ sóng rộng rãi, chúng ta chắc chắn sẽ thực hiện được nhiều công việc, truyền thông tin, dữ liệu với tốc
độ nhanh hơn và chi phí thấp hơn nhiều so với cách thức truyền thống Chính điều này, đã thúc đẩy sự khai sinh và phát triển của ứng dụng Chat - ứng dụng truyền thông giúp cho việc truyền thông tin nay trở nên dễ dàng hơn và tiết kiệm hơn, nhanh chóng hơn, làm biến đổi đáng kể bộ mặt văn hóa, nâng cao chất lượng cuộc sống con người.
II Đối tượng và phạm vi nghiên cứu:
Nghiên cứu phát triển ứng dụng chat trên 2 nền tảng phổ biến nhất hiện nay là android và ios
III Phương pháp nghiên cứu:
- Sử dụng kiến thức đã học và các tài liệu có liên quan trong và ngoài nước liên quan đến đề tài nghiên cứu đặc biệt là các tài liệu về phát triển ứng dụng , thiết kế hệ thống trong hệ thống thông tin di động.
- Nghiên cứu và tìm hiểu tập trung bám sát đề cương dưới sự hướng dẫn của Thầy giáo.
IV Mục tiêu nghiên cứu của đề tài:
Nghiên cứu và phát triển thành công để ứng dụng có thể truyền thông tin trực tiếp theo thời gian thực và chạy ổn định trên cả 2 nền tảng là android và ios.
V Kết cấu của đề tài:
Chương 1 Giới thiệu về hệ thống chat và các công nghệ phục vụ cho việc lập trình hệ thống.
Chương 2 Phân tích các giao thức truyền dẫn thông tin trong hệ thống thông tin di động
Chương 3 Phân tích chi tiết và thiết kế hệ thống
Hà Nội, ngày … tháng … năm 2019
Sinh viên thực hiện Mai Tuấn Việt
Trang 7MỤC LỤC
TỜ GIAO NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP
LỜI CAM ĐOAN 3
LỜI NÓI ĐẦU 4
DANH MỤC HÌNH VẼ 7
DANH MỤC KÝ HIỆU, THUẬT NGỮ VIẾT TẮT 8
CHƯƠNG 1 GIỚI THIỆU VỀ HỆ THỐNG CHAT VÀ CÁC CÔNG NGHỆ PHỤC VỤ CHO VIỆC LẬP TRÌNH HỆ THỐNG 9
1.1 Giới thiệu chung về hệ thống chat 10
1.2 Giới thiệu các công nghệ sử dụng cho hệ thống chat 11
1.2.1 Ngôn ngữ javascript 11
1.2.2 Công nghệ React Native 13
1.2.3 FireBase 14
1.3 Kết luận chương 22
CHƯƠNG 2 PHÂN TÍCH CÁC GIAO THỨC TRUYỀN DẪN THÔNG TIN TRONG HỆ THỐNG THÔNG TIN DI ĐỘNG 23
2.1 Các giao thức truyền dẫn thông tin trong hệ thống thông tin di động 24
2.2 Sơ đồ, giao thức kết nối được sử dụng trong hệ thống Chat 33
2.3 Kết luận chương 41
CHƯƠNG 3: PHÂN TÍCH DỮ LIỆU VÀ THIẾT KẾ HỆ THỐNG 42
3.1 Cài đặt và thiết kế cơ sở dữ liệu 43
3.1.1 Cài đặt và thiết kế cơ sở dữ liệu cho chức năng đăng ký và đăng nhập 43
3.1.2 Cài đặt và thiết kế cơ sở dữ liệu cho chức năng gửi và nhận tin nhắn 48
3.1.3 Sơ đồ quản trị 50
3.2 Kiến trúc quản lý dữ liệu 50
3.3 Thiết kế giao diện người dùng 53
3.3.1 Xây dựng màn hình đăng nhập 53
3.3.2 Xây dựng màn hình đăng ký : 54
3.3.3 Xây dựng màn hình chính: 55
3.3.4 Màn hình danh bạ : 56Giáo viên hướng dẫn: TS Trần Hoài Trung 3.3.5 Xây dựng phòng chat : 57
3.4 Kết luận Chương 57
KẾT LUẬN VÀ KIẾN NGHỊ 59
TÀI LIỆU THAM KHẢO 60
PHỤ LỤC 6Giáo viên hướng dẫn: TS Trần Hoài Trung1
Trang 8DANH MỤC HÌNH VẼ
HÌNH 1.1 XU HƯỚNG SỬ DỤNG FIREBASE 15
HÌNH 1.2 CÁC DỊCH VỤ CỦA FIREBASE 16Giáo viên hướng dẫn: TS Trần Hoài Trung HÌNH 1.3 MÔ PHỎNG DỮ LIỆU CỦA CƠ SỞ DỮ LIỆU TRÊN FIREBASE 17
HÌNH 1.4 FIREBASE VÀ CÁC THIẾT BỊ HỖ TRỢ 17
HÌNH 1.5 CÁC HÌNH THỨC HỖ TRỢ XÁC THỰC CỦA NGƯỜI DÙNG 18
HÌNH 1.6 MÔ PHỎNG DỮ LIỆU TỪ FIREBASE TỚI CÁC THIẾT BỊ 19
HÌNH 1.7 CHỨC NĂNG ĐỒNG BỘ CẤU HÌNH TRONG FIREBASE 21
HÌNH 2.1 CÁC GIAO THỨC TRUYỀN DẪN THÔNG TIN 24
HÌNH 2.2 MÔ PHỎNG HOẠT ĐỘNG TRUYỀN DẪN THÔNG TIN 25
HÌNH 2.3 GIAO THỨC TCP 26Giáo viên hướng dẫn: TS Trần Hoài Trung HÌNH 2.4 SƠ ĐỒ HOẠT ĐỘNG CỦA HTTP 28
HÌNH 2.5 GIAO THỨC SSH 29
HÌNH 2.6 GIAO THỨC SMTP 30
HÌNH 2.7 GIAO THỨC TCP/IP 31
HÌNH 2.8 GIAO THỨC BẮT TAY CỦA WEBSOCKET 34
HÌNH 2.8 SƠ ĐỒ DỮ LIỆU CỦA WEBSOCKET 36Giáo viên hướng dẫn: TS Trần Hoài Trung HÌNH 2.9 MÔ HÌNH DỮ LIỆU TRONG FIRESTORE 38
HÌNH 2.10 SƠ ĐỒ CẤU TRÚC ỨNG DỤNG CHAT 39
HÌNH 2.11 SƠ ĐỒ HOẠT ĐỘNG GIỮA PHÍA MÁY KHÁCH VÀ MÁY CHỦ.40 HÌNH 3.1 SƠ ĐỒ LUỒNG DỮ LIỆU XÁC THỰC TRONG FIREBASE 44
HÌNH 3.2 GIAO DIỆN HƯỚNG DẪN KẾT NỐI ỨNG DỤNG VỚI FIREBASE 45
HÌNH 3.3 GIAO DIỆN TẠO CƠ SỞ DỮ LIỆU 46Giáo viên hướng dẫn: TS Trần Hoài Trung HÌNH 3.4 BẢNG LỰA CHỌN KIỂU XÁC THỰC TRONG FIREBASE 46Giáo viên hướng dẫn: TS Trần Hoài Trung HÌNH 3.5 MÀN HÌNH CẤU HÌNH FIREBASE CHO ỨNG DỤNG 46Giáo viên hướng dẫn: TS Trần Hoài Trung HÌNH 3.6 BẢNG LƯU TRỮ THÔNG TIN ĐĂNG NHẬP CỦA NGƯỜI DÙNG 48 HÌNH 3.7 BẢNG LƯU TRỮ TIN NHẮN CỦA NGƯỜI DÙNG 50
HÌNH 3.8 SƠ ĐỒ VAI TRÒ CỦA QUẢN TRỊ VIÊN VÀ NGƯỜI DÙNG 50
HÌNH 3.9 SƠ ĐỒ KIẾN TRÚC DỮ LIỆU REDUX 51
HÌNH 3.10 SƠ ĐỒ DỮ LIỆU CỦA STORE TRONG REDUX 53
HÌNH 3.11 MÀN HÌNH ĐĂNG NHẬP 53
HÌNH 3.12 MÀN HÌNH ĐĂNG KÝ 54
HÌNH 3.13 MÀN HÌNH CHÍNH 55
HÌNH 3.14 MÀN HÌNH DANH BẠ 56Giáo viên hướng dẫn: TS Trần Hoài Trung Hình 3.15 Màn hình phòng chat 57
Trang 9DANH MỤC KÝ HIỆU, THUẬT NGỮ VIẾT TẮT
Từ viết
Api Application programming
AICH Acquistion Indication
Trang 10CHƯƠNG 1 GIỚI THIỆU VỀ HỆ THỐNG CHAT VÀ CÁC CÔNG NGHỆ PHỤC VỤ CHO VIỆC LẬP TRÌNH HỆ
THỐNG
Giới Thiệu Chương
Trước hết, với sự phát triển ngày càng nhanh của xã hội thì kéo theo đó là
sự lớn mạnh một cách nhanh chóng của công nghệ thông tin Vì lẽ đó nên chúng
ta ngày càng được chứng kiến nhiều sự xuất hiện của rất nhiều công nghệ mới,nền tảng phát triển mới như hiện nay Vậy thì, việc lựa chọn ngôn ngữ, lựa chọnnền tảng để bắt đầu một dự án là một việc hết sức phức tạp và phụ thuộc vào rấtnhiều yếu tố cũng như mục đích phát triển của dự án Và ở chương 1 chúng ta sẽnói về lý do để lựa chọn và đặc điểm của các công nghệ được sử dụng cho việcphát triển hệ thống chat
Trang 111.1 Giới thiệu chung về hệ thống chat
Trước hết, Để xây dựng một hệ thống Chat lấy dữ liệu thời gian thực thìứng dụng phải gồm 2 phần chính là phần giao diện người dùng và phần máy chủ
Và những ngôn ngữ này được gọi là ngôn ngữ native, và có một sự thật làngôn ngữ native thì đêm lại cho chúng ta rất nhiều ưu điểm như là :
Về mặt hiệu năng thì khi sử dụng ngôn ngữ để lập trình thì ứng dụng sẽchắc chắn chạy nhanh hơn trong hầu hết trường hợp Tuy nhiên sự chênh lệch ởcác ứng dụng có thể là nhỏ, chấp nhận được và khó nhận biết bởi người dùng
Và có một sự thật là chỉ ngôn ngữ native mới có khả năng truy cập các phầncứng (như camera, GPS, thiết bị thu âm… ) và có thể truy cập đến các quyềnnhư : sao chép, tạo, ghi, đọc tập tin (trên bộ nhớ của điện thoại), các thông tindanh bạ, thông tin cá nhân, thực hiện cuộc gọi, nhắn tin… Nói cách khác, khi sửdụng ngôn ngữ native thì ứng dụng có thể khai thác được sức mạnh phần cứngnhiều nhất của nền tảng
Tuy nhiên thì với những dự án vừa và nhỏ thì công cuộc xây dựng ứngdụng kiểu này sẽ thực sự tốn kém chi phí và thời gian cũng như công sức pháttriển và bảo trì ứng dụng Và với một dự án nhỏ về hệ thống chat như thế này,thì ngôn ngữ native chắc chắn không phải là ngôn ngữ tối ưu nhất để phát triểnứng dụng Và sự lựa chọn của tôi trong dự án này chắc chắn phải là một nềntảng giúp tôi chỉ việc code một lần để sở hữu ứng dụng có thể vận hành trên cảhai nền tảng
Sự thật là hiện nay có một vài framework khá tốt như react native, flux
… Và lựa chọn của tôi trong ứng dụng này sẽ là React native,Chúng ta sẽ bàn
về lý do chúng ta sử dụng react native ở chương 2 React native thì được viếttrên ngôn ngữ javascript và đấy cũng chính là điểm mạnh của framework này
Vậy thì với react native và javascript chúng ta có thể dễ dàng xây dựnggiao diện người dùng
Trang 12Còn lại bên phía máy chủ, có hai phần chính để xây dựng một hệ thốngmáy chủ hoàn chỉnh đó chính là api và cơ sở dữ liệu, và cũng tồn tại khá nhiềuloại api như là graphql server , hay restful api , rest api … Và để mỗi loại api thì
có các ngôn ngữ, cách thực lập trình khác nhau Và chọn loại api nào sẽ tuỳthuộc vào mục đích sử dụng của chúng ta Api sẽ có nhiệm vụ kết nối giữa phíangười dùng và hệ thống cơ sở dữ liệu Và có một vài cơ sở dữ liệu có thể kể đếnnhư là hệ thống cơ sở quản lý dữ liệu quan hệ (Oracle, M, MS server,PostgreSQL) , hệ cơ sở dữ liệu hướng tài liệu (MongoDB), Cơ sở dữ liệu dạngkhoá …
Ngoài ra thì chúng ta cũng cần phải có thư viện cung cấp các phương thức
để phía người dùng có thể giao tiếp với api để lấy dữ liệu từ cơ sở dữ liệu Cũngphải nói rằng mỗi loại api khác nhau thì có các cách để gửi http request khácnhau và các thư viện cung cấp các phương thức gửi http request khác nhau như
là axios, apollo client …
Tuy nhiên thì ở đây, Để tạo ra một ứng dụng chat có sử dụng dữ liệu thờigian thực, thì đòi hỏi phía máy chủ và phía máy khách phải liên tục gửi dữ liệusang cho nhau với độ trễ thấp nhất có thể ( ms ) Vì vậy nên sự lựa chọn của tôitrong dự án này là cơ sở dữ liệu phi quan hệ ( NoSQL ) Cùng với đó tôi sẽ sửdụng các phương thức mà FireBase cung cấp để phía máy khách có thể truy cậpvào và lấy dữ liệu trực tiếp từ hệ thống cơ sở dữ liệu
1.2 Giới thiệu các công nghệ sử dụng cho hệ thống chat
Trước tiên là về phía giao diện người dùng, Tôi sẽ phân tích sâu hơn vềframework react native, lý do sử dụng nó và ngôn ngữ được sử dụng đó chính làJavascript
1.2.1 Ngôn ngữ javascript
Ngôn ngữ lập trình Javascript được giới thiệu đầu tiên vào năm
1995 Mục đích là để đưa những chương trình vào trang web ở trình duyệtNetscape Navigator - một trình duyệt web phổ biến những năm 1990
JavaScript được phát triển bởi Brendan Eich tại Hãng truyền thôngNetscape với cái tên đầu tiên là Mocha, rồi sau đó đổi tên thành LiveScript, vàcuối cùng thành JavaScript Có lẽ việc đổi tên như vậy là để giúp JavaScriptđược chú ý nhiều hơn Bởi tại thời điểm này, Java đang được coi là một hiệntượng và trở nên phổ biến
Trang 13Trên thực tế, JavaScript không được phát triển dựa trên Java Và chúng làhai ngôn ngữ hoàn toàn khác biệt Các ta sẽ thấy rõ hơn điều này ở phần sau củabài viết.
Đặc điểm chung của javascript
Là ngôn ngữ lập trình bậc cao (high-level) giống như: C/C++, Java,Python, Ruby, Nó rất gần với ngôn ngữ tự nhiên của con người Trongkhi ngôn ngữ lập trình bậc thấp (low-level) như: Assembly sẽ gần vớimáy tính hơn
Là ngôn ngữ lập trình động (dynamic programming language): nhưPython, Ruby, Perl, Chúng được tối ưu hoá nhằm nâng cao hiệu suấtcho lập trình viên Trong khi ngôn ngữ lập trình tĩnh (static programminglanguage): như C/C++, lại được tối ưu hoá để nâng cao hiệu suất chophần cứng máy tính
Là ngôn ngữ lập trình kịch bản (scripting language): nghĩa là không cầnbiên dịch (compile) hay liên kết (linked) giống như ngôn ngữ lập trìnhbiên dịch (C/C++, Java, ) mà nó sẽ được dịch tại thời điểm chạy
Là ngôn ngữ dựa trên đối tượng (object-based): tức nó gần giống nhưngôn ngữ lập trình hướng đối tượng, ngoại trừ JavaScript không hỗ trợtính kế thừa và đa hình
Là ngôn ngữ dựa trên nguyên mẫu (prototype-based): là một kiểu của lậptrình hướng đối tượng, trong đó các hành vi của đối tượng được sử dụnglại
JavaScript có rất nhiều ứng dụng trên nhiều môi trường và nền tảng khác khau:
JavaScript cùng với HTML, CSS trở thành ngôn ngữ không thể thiếu đốivới website
Ngoài ra, có rất nhiều framework javascript khác nhau phía front-end:Angular.js, Angular2, ReactJS, Vue.js, Ember.js, Meteor.js, backbone
JavaScript có thể sử dụng phía server với framework : Node.js
Một số database sử dụng JavaScript như là kịch bản và là ngôn ngữ query:MongoDB, CouchDB
JavaScript có thể dùng để xây dựng ứng dụng Desktop với framework:Electron Những ứng dụng nổi tiếng có thể kể đến là: Atom, Visual StudioCode, GitKraken, Wordpress.com,
Trang 14 Để xây dựng ứng dụng điện thoại đa nền tảng (Android, IOS) có thểdùng: React-native
1.2.2 Công nghệ React Native
React Native là công nghệ được tạo bởi Facebook, cho phép các lập trìnhviên sử dụng JavaScript để làm mobile apps trên cả Android và iOS với cảmnhận và giao diện native Một ví dụ để làm rõ cách vận hành của React Native làcác code bọc ngoài của code native Có rất nhiều thành tố được tạo nên khi đang
“bọc” chức năng native của iOS hoặc Android
Một lý do lập trình mobile app rất khó và tốn thời gian là vì thực tế ta cầntìm hiểu 2 hệ sinh thái hoàn toàn khác biệt Nếu muốn lập trình app iOS, chúng
ta cần phải học Swift hoặc Objective-C và Cocoa Pods Nếu muốn lập trình appAndroid, Ta cần học Java và Android SDK
Tuy nhiên, điều tôi có thể nói là chúng khác nhau và việc học từng ngônngữ đó sẽ tốn khá nhiều thời gian Điều tương tự cũng xảy ra với cácframeworks: Cocoa Touch và Android SDK
Tất nhiên, mỗi frameworks luôn có 1 gói các công cụ như công cụ testing,các libs, packages… và việc các dev phải cập nhật các tính năng mới nhất củamỗi hệ sinh thái là điều không thể bàn cãi
Mặc khác, nếu chúng ta chọn lập trình trên React Native, phần lớn thờigian chúng ta sẽ chỉ cần học 1 bộ công cụ Có rất nhiều thứ để làm quen như:JavaScript, Node, React Native… nhưng chỉ có 1 công cụ duy nhất để học
Chúng ta sẽ build được ứng dụng Native, và chúng ta cũng có thể buildứng dụng đó một cách đa nền tảng (multi-platform) chứ không phải là một
“mobile web app”, không phải là “HTML5 app”, và cũng không phải là một
“hybrid app” hay cũng không chỉ build trên iOS hay Android mà chúng ta build
và chạy được cả hai hệ sinh thái
Một điểm hay ho nữa mà tôi có đề cập là giảm chi phí tái biên dịch củaNative bằng cách sử dụng Hot-Loading tức là ta không cần phải build lại ứngdụng từ đầu nên việc chỉnh sửa diễn ra rất nhanh chóng Giúp cho lập trình viên
có thể thấy được những chỉnh sửa của họ một cách nhanh chóng trực quan,không còn phải bỏ quá nhiều thời gian trong việc build và chạy ứng dụng nữa
Khả năng sử dụng lại đóng vai trò quan trọng trong lập trình phần mềm,nên mỗi khi ta có thể sử dụng lại code thì React Native là công cụ tốt
Trang 15React Native không phải chỉ viết 1 lần mà nó chạy platform ở mọi nơi.Bất cứ khi nào ta lập trình 1 app, ta cần phải xây dựng UI trông native Vì lý donày, 1 số UI code cần được viết theo đúng các chỉ dẫn và chuẩn mực tốt nhấtcủa platform đó.
Tuy nhiên, sẽ luôn có vài UI code thông dụng có thể được chia sẻ chungvới nhau cùng tất cả logic Tính năng “có thể chia sẻ code” có rất nhiều lợi điểmnhư: tận dụng nguồn nhân lực tốt hơn, duy trì ít code hơn, ít bugs hơn, các tínhnăng trong cả 2 platforms cũng tương tự nhau…
Và điểm lợi hại kế tiếp của React Native đó chính là chúng ta chỉ cần sửdụng JS để phát triển được một ứng dụng di động hoàn chỉnh, đồng thời giảiquyết được các vấn đề mà Native App gặp phải mà tôi đã nêu ở trên Và rồi còn
cả kết hợp với code native như Swift, Java, v.v…
Khi tạo ứng dụng sử dụng React Native, việc dự đoán và hiểu UI củachúng ta cũng dễ dàng hơn vì nó có 1 API đã được khai báo Sự khác biệt giữacác cách tiếp cận này là khi ta có 1 ứng dụng với nhiều trạng thái khác nhau, và
ta cần phải theo dõi các thay đổi trong UI và chỉnh sửa chúng
Điều này có thể là 1 nhiệm vụ phức tạp và không thể dự đoán được khiapp của ta phát triển Đây được gọi là Imperative Programming Nếu ta dùngReact Native vốn đã có APIs đã được khai báo, ta sẽ chỉ cần quan tâm đến tìnhtrạng UI hiện tại trông như thế này, mà không cần theo dõi những UI cũ
Và đó chính là những ưu điểm để chúng ta sử dụng react native cùngtypescript để phát triển giao diện người dùng
Đến phần xây dựng máy chủ thì chúng ta sẽ tiếp cận với một số côngnghệ như node js , mongoDB và mongoose
1.2.3 FireBase
FireBase là một nền tảng phát triển ứng dụng di động và web Họ cungcấp rất nhiều công cụ và dịch vụ để phát triển ứng dụng chất lượng, rút ngắnthời gian phát triển và phát triển cơ sở người dùng mà không cần quan tâm đến
hạ tầng phần cứng
Firebase là sự kết hợp giữa nền tảng cloud với hệ thống máy chủ cực kìmạnh mẽ của Google Firebase cung cấp cho chúng ta những API đơn giản,mạnh mẽ và đa nền tảng trong việc quản lý, sử dụng database
Ví dụ: Với Firebase, chúng ta có thể tự xây dựng một ứng chat thời gianthực như Facebook mesage, Zalo… trong vài ngày, thậm chí vài giờ
Trang 16Đơn giản vì giờ chúng ta chỉ cần phải lo phát triển phía Client( Ứng dụngmobile), còn phần backend(server) đã có Firebase lo, chúng ta chỉ cần gọi API làđủ.
Trên thế giới thì xu hướng sử dụng Firebase rất lớn Như trên ảnh dưới
Hình 1.1 Xu hướng sử dụng FireBase
Firebase luôn có xu hướng tìm kiếm cao và ổn định
Lịch sử phát triển Firebase
Firebase có tiền thân là Envolve Đây là dịch vụ cung cấp những API để
dễ dàng tích hợp tính năng chat vào trang web
Điều thú vị là người dùng Envolve sử dụng dịch vụ để truyền dữ liệu chứkhông đơn thuần cho ứng dụng chat Họ sử dụng Envolve để đồng bộ dữ liệucủa những ứng dụng như game online, danh bạ, lịch…
Nhận biết được điều này, CEO của Envolve đã tách biệt hệ thống chat vàđồng bộ dữ liệu thời gian thực thành 2 mảng riêng biệt
Hiện nay, danh mục dịch vụ của Firebase rất nhiều Từ hệ thống chat thờigian thực, đến A/B testing… và cả ML KIT( Bộ công cụ phát triển Machinelearning)
Trang 17Thực chất, dữ liệu của ta được lưu dưới dạng JSON object, và developer
có thể quản lý theo thời gian thực
Trang 18Hình 1.3 Mô phỏng dữ liệu của cơ sở dữ liệu trên fireBase
Như hình minh họa trên, chỉ với một API duy nhất, ta sẽ có được cả dữliệu mới nhất và cả những bản update của nó
Trang 19Ở đây có khái niệm mới là NoSQL Đây là một khái niệm về databasekiểu mới, khác với kiểu truyền thống là SQL.
2 Authentication
Hình 1.5 Các hình thức hỗ trợ xác thực của người dùng
Với tính năng này của Firebase, chúng ta sẽ dễ dàng xây dựng tính năngđăng nhập mà không cần phải sử dụng dữ liệu đăng ký riêng
Firebase cung cấp một số phương pháp xác thực cho ứng dụng như:
Email & Password
Phone numbers
Và còn nhiều hơn nữa!
Có một số ứng dụng nổi tiếng sử dụng tính năng này của Firebase như:Google Sign-in, Smart Lock
Trang 203 Firebase Cloud Messaging (FCM)
Hình 1.6 Mô phỏng dữ liệu từ Firebase tới các thiết bị
Đây chính là tính năng khởi thủy của Firebase, giúp chúng ta xây dựngứng dụng chat -trò chuyện Giờ đây, nó còn cho phép ta đẩy thông báo( pushnotification) tới nhiều thiết bị Android, IOS hay Web
Ta sẽ có thể gửi thông báo(tối đa 2KB) hay tin nhắn( giới hạn 4KB) với
độ tin cậy cao và được tối ưu cho Battery
Với FCM, chúng ta có thể tích hợp với Firebase Analytics để có thể dễ dàngphân tích người dùng, từ đó đưa ra chiến lược marketing hợp lý
4 Firebase Database Query
Bình thường, khi các ta làm việc với database như MySQL, SQLServer… khi muốn lấy dữ liệu ra thì sẽ cần phải query vào database với câu lệnhSQL rất phực tạp Fireabase database query giúp đơn giản hóa quá trình này.Firebase có 4 kiểu sắp xếp:
Trang 21 SELECT * FROM Users WHERE name === "Anh Son";
Nếu muốn giới hạn số lượng Users được lấy ra thì thêm câu lệnh LIMIT
SELECT * FROM Users WHERE name === "GeekyAnts" LIMIT 10;
Trong Firebase, việc query cũng hoàn toàn tương tự:
const db = firebase.database();
const firebaseRef = db.child('child');
firebaseRef.orderByChild("users").equalTo("GeekyAnts ").on("child_added",
function(snapshot){
console.log(snapshot.key)
Trang 225 Remote Config
Hình 1.7 Chức năng đồng bộ cấu hình trong FireBase
Thông thường, các ứng dụng sẽ có mục Setting được lưu trữ ở từng thiết
bị Nếu người dùng mà gỡ ứng dụng thì lần sau cài đặt lại, ứng dụng sẽ mất cácthiết lập trước đó
Hoặc trường hợp khác, nếu người dùng cài đặt ứng dụng trên nhiều thiết
bị khác nhau Họ sẽ phải tự cấu hình thiết lập bằng tay trên từng thiết bị sao chogiống nhau
Về phía nhà phát hành, nếu muốn cập nhập thiết lập ứng dụng từ xa như:đến một ngày nào đặc biệt nào đó( Nghỉ lễ tết, ngày quốc tế phụ nữ…), ta muốnđổi màu ứng dụng, muốn hiển thị danh mục nào đó để quảng cáo thì RemoteConfig là giải pháp giúp ta thực hiện điều đó Và chúng ta sẽ chỉ phải cập nhậttrên Fireabase mà ứng dụng phía người dùng sẽ tự đổi theo
Khi đã có đầy đủ các phần liên quan đến thiết kế người dùng và máy chủthì chúng ta cũng cần sử dụng thư viện để cung cấp các HTTP Request để phíangười dùng có thể giao tiếp được với server để gửi và nhận dữ liệu
Trang 231.3 Kết luận chương.
Thực tế, để xây dựng một ứng dụng di động truyền thông tin thời gianthực có rất nhiều cách, và chúng ta hoàn toàn có thể xây dựng bằng rất nhiều cácngôn ngữ, công nghệ và kiến trúc khác nhau tuỳ theo mục đích sử dụng và mụctiêu nhắm đến Như là khi phát triển một ứng dụng vừa và nhỏ thì việc tối ưuhoá tốc độ cũng như là lưu lượng xử lý là không thực sự cần thiết, các kiến trúcquản lý dữ liệu cũng không nhất thiết phải được sử dụng trong khi đó thì để pháttriển và làm việc với các ứng dụng lớn, đòi hỏi tốc độ nhanh và khả năng xử lýthông tin nhiều thì việc tối ưu hoá nó là điều bắt buộc Ở đây, trong ứng dụngnày thì chúng ta sẽ chỉ lựa chọn những công nghệ đơn giản, khả năng tuỳ chỉnhcao và hỗ trợ cho chúng ta hoàn thành được dự án một cách nhanh nhất vì vậynên những công nghệ dùng để tối ưu ứng dụng như immutable js, react hooks,hay là các mô đun native code sẽ không được sử dụng Và thay vào đó là sửdụng javascript thuần và gói lại trong một file bundle rồi gọi thẳng vào nativecode của hai nền tảng như ios và android để đem lại tốc độ xây dựng ứng dụngmột cách nhanh chóng và hiệu quả nhất
Trang 24CHƯƠNG 2 PHÂN TÍCH CÁC GIAO THỨC TRUYỀN DẪN THÔNG TIN TRONG HỆ THỐNG THÔNG TIN DI
ĐỘNG
Giới thiệu chương
Ở chương 1 chúng ta đã tìm hiểu về các công nghệ, ngôn ngữ và kiến trúcquản lý dữ liệu để phát triển nên ứng dụng Trong đó thì có bao gồm các thư việncung cấp các phương thức để ứng dụng giao tiếp với máy chủ cũng như là hệthống cơ sở dữ liệu Ở chương hai thì chúng ta sẽ tìm hiểu cách thức mà các thưviện đó phát triển và xây dựng để cung cấp các phương thức giao tiếp giữa phíamáy khách và phía máy chủ
Trang 252.1 Các giao thức truyền dẫn thông tin trong hệ thống thông tin di động
Có nhiều giao thức trong khi thiết lập kết nối trên Internet Dựa theo loạikết nối cần thiết lập, các giao thức được sử dụng cũng rất đa dạng Những giaothức này xác định đặc điểm của kết nối
Nói một cách đơn giản, giao thức là một bộ quy tắc Giao thức mạng làmột tập hợp các quy tắc mà mạng phải tuân theo Giao thức mạng là những tiêuchuẩn và chính sách chính thức được tạo thành từ các quy tắc, quy trình và địnhdạng xác định giao tiếp giữa hai hoặc nhiều thiết bị qua mạng Các giao thứcmạng thực hiện những hành động, chính sách và giải quyết vấn đề từ đầu đếncuối, để quá trình giao tiếp mạng hoặc dữ liệu diễn ra kịp thời, được bảo mật vàquản lý Giao thức mạng xác định các quy tắc và quy ước giao tiếp
Hình 2.1 Các giao thức truyền dẫn thông tin
Giao thức mạng kết hợp tất cả những yêu cầu tiến trình và có những ràngbuộc khi các máy tính, router, máy chủ và các thiết bị hỗ trợ mạng khác bắt đầuthực hiện giao tiếp Các giao thức mạng phải được xác nhận và cài đặt bởi ngườigửi và người nhận để đảm bảo quá trình giao tiếp dữ liệu/mạng diễn ra suôn sẻ
Trang 26Giao thức mạng cũng áp dụng các node phần mềm và phần cứng giao tiếp trênmạng Có một số loại giao thức mạng như sau.
Những giao thức mạng phổ biến hiện nay
Internet Protocol Suite
Internet Protocol Suite (bộ giao thức liên mạng) là tập hợp các giao thứcthực thi protocol stack (chồng giao thức) mà Internet chạy trên đó InternetProtocol Suite đôi khi được gọi là bộ giao thức TCP/IP TCP và IP là nhữnggiao thức quan trọng trong Internet Protocol Suite - Transmission ControlProtocol (TCP) và Internet Protocol (IP) Internet Protocol Suite tương tựnhư mô hình OSI, nhưng có một số khác biệt Ngoài ra không phải tất cả các lớp(layer) đều tương ứng tốt
Protocol Stack
Protocol Stack là tập hợp đầy đủ các lớp giao thức, hoạt động cùng nhau
để cung cấp khả năng kết nối mạng
Transmission Control Protocol (TCP) và đây cũng là giao thức mà tôi sẽ sử
dụng để gửi và nhận dữ liệu trong hệ thống chat
Hình 2.2 Mô phỏng hoạt động truyền dẫn thông tin
TCP (Transmission Control Protocol - "Giao thức điều khiển truyền vận") là
một trong các giao thức cốt lõi của bộ giao thức TCP/IP Sử dụng TCP, các ứngdụng trên các máy chủ được nối mạng có thể tạo các "kết nối" với nhau, mà qua
Trang 27đó chúng có thể trao đổi dữ liệu hoặc các gói tin Giao thức này đảm bảo chuyểngiao dữ liệu tới nơi nhận một cách đáng tin cậy và đúng thứ tự TCP còn phânbiệt giữa dữ liệu của nhiều ứng dụng (chẳng hạn, dịch vụ Web và dịch vụ thưđiện tử) đồng thời chạy trên cùng một máy chủ.
TCP hỗ trợ nhiều giao thức ứng dụng phổ biến nhất trên Internet và các ứngdụng kết quả, trong đó có WWW, thư điện tử và Secure Shell
Trong bộ giao thức TCP/IP, TCP là tầng trung gian giữa giao thức IP bên dưới
và một ứng dụng bên trên Các ứng dụng thường cần các kết nối đáng tin cậykiểu đường ống để liên lạc với nhau, trong khi đó, giao thức IP không cung cấpnhững dòng kiểu đó, mà chỉ cung cấp dịch vụ chuyển gói tin không đáng tin cậy.TCP làm nhiệm vụ của tầng giao vận trong mô hình OSI đơn giản của các mạngmáy tính
Các ứng dụng gửi các dòng gồm các byte 8-bit tới TCP để chuyển qua mạng.TCP phân chia dòng byte này thành các đoạn (segment) có kích thước thích hợp(thường được quyết định dựa theo kích thước của đơn vị truyền dẫn tối
đa (MTU) của tầng liên kết dữ liệu của mạng mà máy tính đang nằm trong đó).Sau đó, TCP chuyển các gói tin thu được tới giao thức IP để gửi nó qua một liênmạng tới mô đun TCP tại máy tính đích TCP kiểm tra để đảm bảo không có góitin nào bị thất lạc bằng cách gán cho mỗi gói tin một "số thứ tự" (sequencenumber) Số thứ tự này còn được sử dụng để đảm bảo dữ liệu được trao cho ứngdụng đích theo đúng thứ tự Mô đun TCP tại đầu kia gửi lại "tin báo nhận"(acknowledgement) cho các gói tin đã nhận được thành công; một "đồng hồ"(timer) tại nơi gửi sẽ báo time-out nếu không nhận được tin báo nhận trongkhoảng thời gian bằng một round-trip time (RTT), và dữ liệu (được coi là bị thấtlạc) sẽ được gửi lại TCP sử dụng checksum (giá trị kiểm tra) để xem có bytenào bị hỏng trong quá trình truyền hay không; giá trị này được tính toán cho mỗikhối dữ liệu tại nơi gửi trước khi nó được gửi, và được kiểm tra tại nơi nhận
Trang 28Hình 2.3 Giao thức TCP
Để thiết lập một kết nối, TCP sử dụng một quy trình bắt tay 3 bước (3-wayhandshake) Trước khi máy khách thử kết nối với một máy chủ, máy chủ phảiđăng ký một cổng và mở cổng đó cho các kết nối: đây được gọi là mở bị động.Một khi mở bị động đã được thiết lập thì một client có thể bắt đầu mở chủ động
Để thiết lập một kết nối, quy trình bắt tay 3 bước xảy ra như sau:
1 Máy khách sẽ yêu cầu mở cổng dịch vụ bằng cách gửi gói tin SYN (góitin TCP) tới server, trong gói tin này, tham số sequence number được gáncho một giá trị ngẫu nhiên X
2 Server hồi đáp bằng cách gửi lại phía client bản tin SYN-ACK, trong góitin này, tham số acknowledgment number được gán giá trị bằng X + 1,tham số sequence number được gán ngẫu nhiên một giá trị Y
3 Để hoàn tất quá trình bắt tay ba bước, client tiếp tục gửi tới server bản tinACK, trong bản tin này, tham số sequence number được gán cho giá trịbằng X + 1 còn tham số acknowledgment number được gán giá trị bằng
Trang 29tính Sau mỗi byte được truyền đi, số này lại được tăng lên Nhờ vậy ta có thểsắp xếp lại chúng khi tới máy tính kia bất kể các gói tới nơi theo thứ tự thế nào.Trên lý thuyết, mỗi byte gửi đi đều có một số thứ tự và khi nhận được thì máytính nhận gửi lại tin báo nhận (ACK) Trong thực tế thì chỉ có byte dữ liệu đầutiên được gán số thứ tự trong trường số thứ tự của gói tin và bên nhận sẽ gửi tinbáo nhận bằng cách gửi số thứ tự của byte đang chờ.
Một số giao thức khác
Internet Protocol (IP)
Internet Protocol là giao thức chính trong Internet protocol suite để chuyển tiếp
dữ liệu qua mạng Chức năng định tuyến của Internet Protocol về cơ bản giúpthiết lập Internet Trước đây, giao thức này là datagram service không kết nốitrong Transmission Control Program (TCP) ban đầu Do đó, Internet protocolsuite còn được gọi là TCP/IP
Hypertext Transfer Protocol (HTTP)
Cổng mặc định của HTTP là 80 và 443 Hai cổng này đều được bảo mật
Hypertext Transfer Protocol over SSL/TLS (HTTPS)
HTTPS được sử dụng với HTTP để cung cấp các dịch vụ tương tự, nhưng vớikết nối bảo mật được cung cấp bởi SSL hoặc TLS
Cổng mặc định của HTTPS là 443
Sơ đồ hoạt động của HTTP
Hình 2.4 Sơ đồ hoạt động của HTTP
HTTP hoạt động dựa trên mô hình Client – Server Trong mô hình này, các máy
tính của người dùng sẽ đóng vai trò làm máy khách (Client) Sau một thao tácnào đó của người dùng, các máy khách sẽ gửi yêu cầu đến máy chủ (Server) và
Trang 30HTTP là một stateless protocol Hay nói cách khác, request hiện tại không biếtnhững gì đã hoàn thành trong request trước đó.
HTTP cho phép tạo các yêu cầu gửi và nhận các kiểu dữ liệu, do đó cho phép xâydựng hệ thống độc lập với dữ liệu được truyển giao
File Transfer Protocol (FTP)
FTP là giao thức phổ biến nhất được sử dụng cho mục đích truyền file trênInternet và trong các mạng riêng
Cổng mặc định của FTP là 20/21
Hình 2.5 Giao thức SSH
SSH là phương thức chính được sử dụng để quản lý các thiết bị mạng một cách
an toàn ở cấp lệnh SSH thường được sử dụng như sự thay thế cho Telnet, vìgiao thức này không hỗ trợ các kết nối an toàn
Cổng mặc định của SSH là 22
Telnet
Telnet là phương thức chính được sử dụng để quản lý các thiết bị mạng ở cấplệnh Không giống như SSH, Telnet không cung cấp kết nối an toàn, mà chỉcung cấp kết nối không bảo mật cơ bản
Cổng mặc định của Telnet là 23
Trang 31Simple Mail Transfer Protocol (SMTP)
SMTP được sử dụng với hai chức năng chính: Chuyển email từ mail servernguồn đến mail server đích và chuyển email từ người dùng cuối sang hệ thốngmail
Cổng mặc định của SMTP là 25 và cổng SMTP được bảo mật (SMTPS) là 46Giáo viên hướng dẫn: TS Trần Hoài Trung5(Không phải tiêu chuẩn)
Hình 2.6 Giao thức SMTP
Domain Name System (DNS)
Domain Name System (DNS) được sử dụng để chuyển đổi tên miền thành địachỉ IP Hệ thống phân cấp DNS bao gồm máy chủ gốc, TLD và máy chủ cóthẩm quyền
Cổng mặc định của DNS là 53
Post Office Protocol phiên bản 3 (POP 3)
Post Office Protocol phiên bản 3 là một trong hai giao thức chính được sử dụng
để lấy mail từ Internet POP 3 rất đơn giản vì giao thức này cho phép client lấynội dung hoàn chỉnh từ hộp thư của server và xóa nội dung khỏi server đó
Cổng mặc định của POP3 là 110 và cổng được bảo mật là 995
Internet Message Access Protocol (IMAP)
IMAP phiên bản 3 là một giao thức chính khác được sử dụng để lấy thư từ máy
Trang 32Cổng mặc định của IMAP là 143 và cổng được bảo mật là 993.
Simple Network Management Protocol (SNMP)
Simple Network Management Protocol được sử dụng để quản lý mạng SNMP
có khả năng giám sát, cấu hình và điều khiển các thiết bị mạng SNMP trap cũng
có thể được cấu hình trên các thiết bị mạng, để thông báo cho máy chủ trungtâm khi xảy ra hành động cụ thể
Cổng mặc định của SNMP là 16Giáo viên hướng dẫn: TS Trần Hoài Trung1/16Giáo viên hướng dẫn: TS Trần Hoài Trung2
Uniform Resource Locator (URL)
Một URL (Uniform Resource Locator) được sử dụng để xác định duy nhất một
tài nguyên trên Web Một URL có cấu trúc như sau:
Trong một URL có 4 thành phần:
Một số khái niệm liên quan
Trang 33là TCP (Transmission Control Protocol - Giao thức điều khiển truyền vận)
và IP (Internet Protocol - Giao thức Internet).
Chú ý: BỘ GIAO THỨC là định nghĩa của các giao thức còn CHỒNG GIAOTHỨC là một hình thức xử lý bộ giao thức bằng phần mềm
Các giao thức được phân chia thành các tầng, Trong đó TCP/IP có 4 tầng mỗitầng lại sử dụng các giao thức ở tầng dưới để đạt đc mục đích của mình
Layer 1 Network Access Layer
Network Access Layer xác định chi tiết về về cách thức dữ liệu được gửi quamạng, bởi các thiết bị phần cứng trực tiếp giao tiếp với môi trường mạng, chẳnghạn như cáp đồng trục, cáp quang hay dây đồng xoắn đôi Các giao thức bao gồmtrong Network Access Layer là Ethernet, Token Ring, FDDI, X.25, FrameRelay vv
Layer 2 Internet Layer
Internet Layer đóng gói dữ liệu vào các gói dữ liệu được biết đến dưới dạng cácgói tin thông giao thức Internet Protocol, chứa địa chỉ nguồn và đích (địa chỉlogic hoặc địa chỉ IP) được sử dụng để chuyển tiếp các gói tin giữa các máy chủ
và qua các mạng
Layer 3 Transport Layer
Mục đích của Transport Layer là cho phép các thiết bị trên máy chủ nguồn vàđích đến trao đổi dữ liệu Transport Layer sẽ xác định mức độ service và trạngthái của kết nối được sử dụng khi vận chuyển dữ liệu
Trong đó có giao thức chính trong lớp Transport là TCP (Transmission ControlProtocol)
Sử dụng TCP, các ứng dụng trên các máy chủ được nối mạng có thể tạo các "kếtnối" với nhau, mà qua đó chúng có thể trao đổi dữ liệu hoặc các gói tin Giaothức này đảm bảo chuyển giao dữ liệu tới nơi nhận một cách đáng tin cậy vàđúng thứ tự
Layer 4 Application Layer
Các thực thể của lớp Application cung cấp các ứng dụng cho phép người dùngtrao đổi dữ liệu ứng dụng qua mạng
Một số ứng dụng thường gặp của chồng giao thức TCP/IP: FTP (File TransferProtocol), DNS
Trang 34Qua đây cũng phải nói rằng chúng ta hoàn toàn có thể sử dụng các giao thứckhác như là HTTP , HTTPS … để xây dựng ứng dụng chat, tuy nhiên thì để cóthể phát triển ứng dụng thời gian thực thì số lượng HTTP Request gửi lên phíamáy chủ là rất lớn và đồng nghĩa với nó là độ trễ rất cao, vì vậy nên chúng tacần sử dựng giao thức TCP để tạo một cổng kết nối giữa phía máy chủ và phíamáy khách, từ đó ta hoàn toàn có thể gửi nhận dữ liệu với độ trễ thấp nhất và vìvậy nên phù hợp để xây dựng hệ thống chat nhất.
2.2 Sơ đồ, giao thức kết nối được sử dụng trong hệ thống Chat
Như đã đề cập ở trên, Giao thức kết nối được sử dụng ở đây là TCP(Transmission Control Protocol) và như đã biết thì chúng ta sẽ sử dụngFireBase làm nền tảng để phát triển hệ thống API ( giao diện lập trình ứngdụng ) và hệ thống cơ sở dữ liệu để phục vụ cho phía máy khách (Client)
FireBase là một dịch vụ được phát triển trên nền tảng của giao thức kết nối TCP
(Transmission Control Protocol) thông qua công nghệ Web Socket
WebSocket
WebSoket là công nghệ hỗ trợ giao tiếp hai chiều giữa client và server bằng cách
sử dụng một TCP socket để tạo một kết nối hiệu quả và ít tốn kém Mặc dù đượcthiết kế để chuyên sử dụng cho các ứng dụng web, lập trình viên vẫn có thể đưachúng vào bất kì loại ứng dụng nào
WebSockets mới xuất hiện trong HTML5, là một kỹ thuật Reverse Ajax.WebSockets cho phép các kênh giao tiếp song song hai chiều và hiện đãđược hỗ trợ trong nhiều trình duyệt (Firefox, Google Chrome và Safari).Kết nối được mở thông qua một HTTP request (yêu cầu HTTP), được gọi
là liên kết WebSockets với những header đặc biệt Kết nối được duy trì đểbạn có thể viết và nhận dữ liệu bằng JavaScript như khi bạn đang sử dụngmột TCP socket đơn thuần
Dữ liệu truyền tải thông qua giao thức HTTP (thường dùng với kĩ thuậtAjax) chứa nhiều dữ liệu không cần thiết trong phần header Một headerrequest/response của HTTP có kích thước khoảng 871 byte, trong khi vớiWebSocket, kích thước này chỉ là 2 byte (sau khi đã kết nối) Vậy giả sửbạn làm một ứng dụng game có thể tới 10,000 người chơi đăng nhập cùng
Trang 35lúc, và mỗi giây họ sẽ gửi/nhận dữ liệu từ server Hãy so sánh lượng dữliệu header mà giao thức HTTP và WebSocket trong mỗi giây:
HTTP: 871 x 10,000 = 8,710,000 bytes = 6Giáo viên hướng dẫn: TS Trần Hoài Trung9,6Giáo viên hướng dẫn: TS Trần Hoài Trung80,000 bits per second (6Giáo viên hướng dẫn: TS Trần Hoài Trung6Giáo viên hướng dẫn: TS Trần Hoài TrungMbps)
WebSocket: 2 x 10,000 = 20,000 bytes = 16Giáo viên hướng dẫn: TS Trần Hoài Trung0,000 bits per second (0.153Kbps) Như bạn thấy chỉ riêng phần header thôi cũng đã chiếm một phầnlưu lượng đáng kể với giao thức HTTP truyền thống
Trang 36Giao thức bắt tay của WebSocket
Hình 2.8 Giao thức bắt tay của WebSocket
Để thực hiện kết nối, client phải gửi một WebSocke t handshake request đếnserver Server sẽ gửi trả lại WebSocket handshake response như bên dưới:
Trang 37Để xác nhận việc kết nối, client sẽ gửi một giá trị Sec-WebSocket-Key được mãhóa bằng Based6Giáo viên hướng dẫn: TS Trần Hoài Trung4 đến server Sau đó bên server sẽ thực hiện: – Nối thêm chuỗi
cố định là “258EAFA5-E914-47DA-95CA-C5AB0DC85B11″ vào
“x3JJHMbDL1EzLkh9GBhXDw==258EAFA5-E914-47DA-95CA-C5AB0DC85B11″ – Thực hiện mã hóa SHA-1 chuỗi trên để được
“1d29ab734b0c958524006Giáo viên hướng dẫn: TS Trần Hoài Trung9a6Giáo viên hướng dẫn: TS Trần Hoài Trunge4e3e91b6Giáo viên hướng dẫn: TS Trần Hoài Trung1da196Giáo viên hướng dẫn: TS Trần Hoài Trung9″ – Mã hóa kết quả vừa nhậnđược bằng Base6Giáo viên hướng dẫn: TS Trần Hoài Trung4 để được “HSmrc0sMlYUkAGmm5OPpG2HaGWk=” – Gửiresponse lại client kèm với giá trị Sec-WebSocket-Accept chính là chuỗi kết quảvừa tạo ra
Client sẽ kiểm tra status code (phải bằng 101) và Sec-WebSocket-Accept xem cóđúng với kết quả mong đợi không và thực hiện kết nối Cùng với đó thì :
thấp và dễ xử lý lỗi Không cần phải có nhiều kết nối như phương phápComet long-polling và cũng không có những nhược điểm như Cometstreaming
nào, so với Comet, thường đòi hỏi một thư viện tốt để xử lý kết nối lại,thời gian chờ timeout, các Ajax request (yêu cầu Ajax), các tin báo nhận
và các dạng truyền tải tùy chọn khác nhau (Ajax long-polling và jsonppolling)
Trang 38Cấu trúc của WebSocket
Hình 2.8 Sơ đồ dữ liệu của websocket
Giao thức chuẩn thông thường của WebSocket là ws:// , giao thức secure
là wss:// Chuẩn giao tiếp là String và hỗ trợ buffered arrays và blobs
Websocket có một số thuộc tính như là :
ReadyState - Diễn tả trạng thái kết nối Nó có các giá trị sau:
Giá trị 0: Kết nối vẫn chưa được thiết lập (Websocket.Connecting)
Giá trị 1: Kết nối đã thiết lập và có thể giao tiếp (Websocket.Open)
Giá trị 2: Kết nối đang qua handshake đóng (Websocket.Closing)
Gía trị 3: Kết nối đã đóng (Websocket.CLOSED)
BufferedAmount : Biểu diễn số byte của UTF-8 mà đã được xếp hàng bởi sửdụng phương thức send()
Bên cạnh đó, ngoài giao thức kết nối và giao diện lập trình ứng dụng thìFireBase còn cung cấp hai loại cơ sở dữ liệu NoSQL cho người dùng có thể lưutrữ cơ sở dữ liệu đám mây và là giải pháp cho các ứng dụng di động với dữ liệuđược đồng bộ hoá theo thời gian thực - Cloud Firestore Và khi chúng ta sử dụngloại cơ sở dữ liệu này thì tất cả các máy khách đều sẽ chia sẻ một phiên bản cơ sở
Trang 39dữ liệu thời gian thực và tự động cập nhật dữ liệu mới nhất Do đó đối với cácứng dụng di động yêu cầu trạng thái đồng bộ hóa giữa các máy trong thời gianthực thì đây là một giải pháp hiệu quả và có độ trễ thấp.
Cloud Firestore là cơ sở dữ liệu mới của Firebase phát triển dành cho ứng dụng
di động Nó là sự kế thừa của Realtime Database với mô hình dữ liệu mới và trựcquan hơn Cloud Firestore phong phú hơn, nhanh hơn và có khả năng mở rộngsiêu việt hơn so với Realtime Database
Giống như Firebase Realtime Database, nó giúp dữ liệu của bạn đồng bộ hóa trêncác ứng dụng client thông qua việc đăng ký realtime và cung cấp hỗ trợ ngoạituyến cho thiết bị di động và web Cloud Firestore cũng cung cấp tích hợp vớicác sản phẩm khác của Firebase và Google Cloud Platform, bao gồm cả CloudFunctions
Tính năng chính
cấp dữ liệu Lưu trữ dữ liệu của bạn trong các document , được tổ chứcthành các collection Các document có thể chứa các đối tượng phức tạp
document riêng lẻ hoặc để truy xuất tất cả các document trong collectionkhớp với các tham số truy vấn của bạn Các truy vấn của bạn có thể baogồm nhiều bộ lọc, kết hợp giữa bộ lọc và sắp xếp
cập nhật dữ liệu trên mọi thiết bị được kết nối Nó cũng được thiết kế đểthực hiện các truy vấn tìm nạp một lần
có thể viết, đọc, nghe và truy vấn dữ liệu ngay cả khi thiết bị ngoại tuyến.Khi thiết bị trở lại trực tuyến, Cloud Firestore sẽ đồng bộ hóa mọi thayđổi cục bộ lên Cloud Firestore
kế để sử dụng cơ sở dữ liệu khó khăn nhất từ các ứng dụng lớn nhất thếgiới
Cách hoạt động
Cloud Firestore là một cơ sở dữ liệu NoQuery được lưu trữ trên đám mây mà cácứng dụng IOS, Android, Web có thể truy cập trực tiếp thông qua SDK.CloudFirestore cũng có sẵn trong Node.js, Java, Python và Go SDKs, REST và RPCAPIs
Trang 40Được tổ chức theo mô hình dữ liệu NoQuery của Cloud Firestore, dữ liệu lưutrong các document ánh xạ tới các giá trị Các document này được lưu trữ trongcác collection cho bạn tổ chức dữ liệu và thực hiện truy vấn
Bảo vệ quyền truy cập vào dữ liệu của bạn trong Cloud Firestore với FirebaseAuthentication cho Android, iOS và JavaScript hoặc nhận dạng và quản lý truycập (IAM)
Mô hình dữ liệu
các collection Dữ liệu đơn giản được lưu trữ trong các document, tương
tự như cách lưu trữ dữ liệu trong JSON Đối với dữ liệu phức tạp, phâncấp có thể cấu trúc dữ liệu theo các subcollection Cloud Firestore yêu cầu
Hình 2.9 Mô hình dữ liệu trong firestore