1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đồ án nghiên cứu phát triển ứng dụng chat cho hệ thống thông tin di động

84 854 8

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 84
Dung lượng 6,45 MB
File đính kèm Do-an-sua2.rar (4 MB)

Nội dung

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 1

TRƯỜ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 2

TRƯỜ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 3

BỘ 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 4

LỜ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 5

LỜI NÓI ĐẦU

Trang 6

I 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 7

MỤ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 8

DANH 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 9

DANH MỤC KÝ HIỆU, THUẬT NGỮ VIẾT TẮT

Từ viết

Api Application programming

AICH Acquistion Indication

Trang 10

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

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 11

1.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 12

Cò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 13

Trê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 15

React 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 17

Thự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 18

Hì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

 Google

 Facebook

 Twitter

 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 20

3 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 22

5 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 23

1.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 24

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

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 25

2.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 26

Giao 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 28

Hì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 29

tí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 30

HTTP 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 31

Simple 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 32

Cổ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 33

là 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 34

Qua đâ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 35

lú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 36

Giao 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 38

Cấ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 39

dữ 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

Ngày đăng: 26/12/2019, 16:15

w