CHƯƠNG I: GIỚI THIỆU CHUNG 1. Đề tài - Tên đề tài: Xây dựng ứng dụng nhắn tin - gọi điện trực tuyến - Công nghệ sử dụng: Flutter (frontend) + NodeJs (backend) - Cơ sở dữ liệu sử dụng: MySQL 2. Lý do chọn đề tài Ở đồ án 1, nhóm đã làm đề tài hướng tới cộng đồng Thiện nguyện, góp phần giúp đỡ những người có nhu cầu tình nguyện, đồng thời san sẻ tình yêu thương, đồng cảm với nhiều người khác. Tiếp nối việc đó, ở đồ án 2 nhóm mở rộng thêm những tính năng đã có ở đồ án 1, góp phần xây dựng 1 cộng đồng thiện nguyện ngày càng lớn mạnh, cũng như tăng tính tương tác giữa những con người có trong cộng đồng.
Ứng dụng chat - gọi điện sẽ góp phần thúc đẩy trao đổi, tương tác giữa những người có cùng tinh thần thiện nguyện, cũng như mang lại hiệu quả cao khi trao đổi thông tin, chia sẻ thuận tiện hơn. Tóm tắt đề tài Trong thời buổi đại dịch hiện nay, việc gọi điện thoại hoặc nhắn tin qua 1 kênh mạng xã hội là điều rất phổ biển đối với tất cả mọi người. Việc này giúp mọi người vừa tiết kiệm tiền vừa nhanh chóng, tiện lợi cho dù ở nơi nào. Cộng đồng thiện nguyện đã có riêng cho mình 1 mạng xã hội dùng để chia sẻ thông tin tại đó rồi, tuy nhiên việc chat giữa các thành viên có trong 1 sự kiện là điều rất cần thiết.
Chính vì thế, ứng dụng nhắn tin, gọi điện thoại trực tuyến ra đời dành riêng cho cộng đồng thiện nguyện, nhằm nâng cao tính tương tác cho mọi người trong môi trường này. Mục tiêu đề tài - Xây dựng 1 ứng dụng Chat & Gọi điện trực tuyến dành riêng cho cộng đồng thiện nguyện ở đồ án 1 có khả năng tương tác với độ trễ thấp nhất. - Tìm hiểu được công nghệ thích hợp xây dựng ứng dụng. - Hoàn thành được báo cáo môn học.
Phương pháp nghiên cứu - Nghiên cứu các ứng dụng có sẵn trên thị trường, nhận xét được ưu khuyết điểm của các ứng dụng đó (Messenger, Zalo,. - Tìm hiểu các công nghệ mới trên thị trường, nhận xét và chọn ra phần mềm thích hợp nhất. - Đánh giá khả năng của nhóm ở mức độ nào, từ đó tìm ra tính năng thích hợp nhất để phát triển. Ý nghĩa và hướng của đề tài 6.
Về mặt tài liệu - Sử dụng nguồn tài liệu tham khảo Flutter, NodeJs, MySQL. - Có tài liệu đặc tả use-case, sơ đồ lớp, tuần tự, mô hình thiết kế giao diện. Về mặt sản phẩm - Tạo ra ứng dụng Chat & Gọi điện dành cho Thiện nguyện có khả năng kết nối trực tuyến. - Xử lý các vấn đề về hiệu suất của ứng dụng 1 cách hiệu quả.
- Chức năng phù hợp với tình hình thực tế và dễ sử dụng. 7 CHƯƠNG II: CÔNG NGHỆ LIÊN QUAN 1. Giới thiệu Flutter là nền tảng phát triển ứng dụng đa nền tảng cho iOS và Android do Google phát triển được sử dụng để tạo ra các ứng dụng gốc (native app) cho Google. Flutter gồm 2 thành phần quan trọng: - Một SDK (Software Development Kit): Một bộ sưu tập các công cụ sẽ giúp bạn phát triển các ứng dụng của mình.
Điều này bao gồm các công cụ để biên dịch mã của bạn thành mã máy gốc (mã cho iOS và Android). - Một Framework (UI Library based on widgets): Một tập hợp các thành phần giao diện người dùng (UI) có thể tái sử dụng (button, text inputs, slider, v.) giúp bạn có thể cá nhân hóa tùy theo nhu cầu của riêng mình. Tính năng nổi bật của Flutter: - Flutter hiện đã và đang là một react framework. - Sử dụng ngôn ngữ lập trình Dart đơn giản và dễ học.
- Phát triển ứng dụng nhanh. - Giao diện người dùng rất đẹp và linh hoạt. - Hỗ trợ rất nhiều widget khác nhau. - Thể hiện cùng một UI trên nhiều nền tảng.
- Ứng dụng có hiệu năng cao. Lý do sử dụng Phát triển ứng dụng nhanh chóng: Tính năng hot reload giúp bạn nhanh chóng 8 và dễ dàng thử nghiệm, xây dựng giao diện người dùng, thêm tính năng và sửa lỗi nhanh hơn. Trải nghiệm tải lại lần thứ hai, mà không làm mất trạng thái, trên emulator, simulator và device cho iOS và Android. Giao diện người dùng đẹp và thu hút: Thỏa mãn người dùng của bạn với các widget built-in đẹp mắt của Flutter theo Material Design và Cupertino (iOS-flavor), các giao diện lập trình ứng dụng (API) chuyển động phong phú, scroll tự nhiên mượt mà và tự nhận thức được nền tảng.
Framework hiện đại: Dễ dàng tạo giao diện người dùng của bạn với framework hiện đại của Flutter và tập hợp các platform, layout và widget phong phú. Giải quyết các thách thức giao diện người dùng khó khăn của bạn với các API mạnh mẽ và linh hoạt cho 2D, animation, gesture, hiệu ứng và hơn thế nữa. Giới thiệu - NodeJS là một nền tảng (platform) phía Server side được xây dựng, vận hành trên V8 JavaScript runtime của Chrome giúp xây dựng và phát triển các ứng dụng mạng một cách nhanh chóng và có khả năng mở rộng dễ dàng.js ra mắt vào năm 2009, bởi Ryan Dahl và nhận sự bảo trợ từ công ty Joyent (Hoa Kỳ). - Phần core bên dưới của Node.js hầu hết được viết bằng C++.
Chính vì thế mà tốc độ xử lý và hiệu năng khá cao. - Bên cạnh đó, Node.js còn tạo ra ứng dụng có tốc độ xử lý nhanh với thời gian thực (real-time).js cũng được áp dụng để tạo các sản phẩm có lượng truy cập lớn, mở rộng nhanh và đổi mới công nghệ… hoặc tạo dự án startup tiết kiệm thời gian nhất. 9 Tính năng của NodeJs bao gồm: - Bất đồng bộ và phát sinh sự kiện (Non-blocking and Event Driven): Tất các các APIs của thư viện Node.js đều bất đồng bộ (non-blocking), NodeJS không cần đợi một API trả về dữ liệu. Server chuyển sang một API khác sau khi gọi nó và có cơ chế riêng để gửi thông báo và nhận phản hồi về các hoạt động của Node.js và API đã gọi.
- Tốc độ nhanh: Phần core phía dưới được viết gần như toàn bộ bằng C++ kết hợp Chrome V8 Engine nên tốc độ xử lý công việc của Node.js cực nhanh, nhưng vẫn đảm bảo được tính chuẩn xác. - Đơn giản – Hiệu năng cao: Node.js sử dụng một mô hình luồng đơn luồng (single thread) và các sự kiện lặp (event-loop). Cơ chế sự kiện cho phép phía Server trả về phản hồi theo non-blocking, đồng thời tăng hiệu quả sử dụng. Các luồng đơn cung cấp dịch vụ cho nhiều request hơn hẳn Server truyền thống.
- Không lưu bộ nhớ đệm (non buffer): Nền tảng Node.js không có vùng nhớ đệm, tức không cung cấp khả năng lưu trữ dữ liệu buffer. Lý do sử dụng NodeJs - Các ứng dụng Nodejs được viết bằng javascript, ngôn ngữ này là một ngôn ngữ khá thông dụng. Theo tác giả của ngôn ngữ Javascript, Ryan Dahl: “Javascript có những đặc tính mà làm cho nó rất khác biệt so với các ngôn ngữ lập trình động còn lại, cụ thể là nó không có khái niệm về đa luồng, tất cả là đơn luồng và hướng sự kiện.” - Nodejs chạy đa nền tảng phía Server, sử dụng kiến trúc hướng sự kiện Event- driven, cơ chế non-blocking I/O làm cho nó nhẹ và hiệu quả. 10 - Có thể chạy ứng dụng Nodejs ở bất kỳ đâu trên máy Mac – Window – Linux, hơn nữa cộng đồng Nodejs rất lớn và hoàn toàn miễn phí.
Các bạn có thể thấy cộng đồng Nodejs lớn như thế nào tại đây, các package đều hoàn toàn free: https://www.com/ - Các ứng dụng NodeJS đáp ứng tốt thời gian thực và chạy đa nền tảng, đa thiết bị. Giới thiệu Để xây dựng một ứng dụng realtime cần sử dụng socketio. Socketio sẽ giúp các bên ở những địa điểm khác nhau kết nối với nhau, truyền dữ liệu ngay lập tức thông qua server trung gian. Socketio có thể được sử dụng trong nhiều ứng dụng như chat, game online, cập nhật kết quả của một trận đấu đang xảy ra,.
Socketio không phải là một ngôn ngữ, mà chỉ là 1 công cụ giúp thực hiện những ứng dụng realtime. Vì thế, không thể sử dụng socketIo để thay thế hoàn toàn cho một ngôn ngữ, mà phải sử dụng kết hợp với một ngôn ngữ khác. Ngôn ngữ đó có thể là php, asp. Cấu trúc một ứng dụng realtime sử dụng socket bao gồm 2 phần: phía server, phía client.
- Phía server Đây là nơi sẽ cài đặt socket io. Ngôn ngữ để dựng server có thể là php, asp. Tuy nhiên, tùy vào ngôn ngữ lựa chọn mà cách cấu trúc server khác nhau. Ở đây, nếu được thì khuyến khích sử dụng nodejs để dựng server, vì như vậy có thể cài trực tiếp socketio vào cùng một server.
Nếu sử dụng php thì phải cài thêm những package khác, hoặc phải chuẩn bị riêng server để chạy socketio. - Phía client: Ở phía client sẽ xây dựng giao diện người dùng. Ở đây có thể sử dụng js, hoặc các thư viện của js như jquery,. Nói chung là ngôn ngữ gì cũng được.
Lý do sử dụng SocketIO Nền tảng này sở hữu ưu điểm về tính bảo mật, khả năng kết nối tự động với server, hỗ trợ mã hóa nhị phân, phương thức kết nối đơn giản. Tính bảo mật cao Socket IO hình thành tựu trên nền tảng Engine.IO với khả năng kích hoạt phương 11 thức long-polling phục vụ quá trình kết nối. Tiếp đó nền tảng này lại sử dụng một số giao thức cải tiến hơn, chẳng hạn như Websocket. Socket IO sở hữu ưu điểm về tính bảo mật, khả năng kết nối tự động với server Nhớ vào quy trình thiết lập chặt chẽ, Socket IO không khó để tạo nhiều kết nối bảo mật.
Ví như Proxy, cân bằng tải, tường lửa hoặc phần mềm diệt virus. Kết nối dễ dàng với server Socket IO có khả năng tạo kết nối thuận lợi với máy chủ server. Giả dụ như khi quá trình khởi chạy bị gián đoạn giữa server và client, Socket IO lập tức khôi phục kết nối, phục hồi server. Socket IO có khả năng tạo kết nối thuận lợi với máy chủ server và máy khách client.
Đặc biệt tính năng trên hoàn toàn có thể tùy chỉnh, dùng có quyền lựa chọn không tiến hành kết nối tự động với server nào đó. Hỗ trợ mã hóa nhị phân Hiện nay, tính năng hỗ trợ mã hóa nhị phân đã thích hợp trên Socket IO. Nó gần giống với ArrayBuffer, Blob tích hợp trên trình duyệt hoặc trong Node. Hỗ trợ tạo kênh đơn giản Socket IO cho phép người từng tạo kênh một cách đơn giản.
Có nghĩa với Socket IO, bạn có thể tạo mối liên kết giữa từng module riêng lẻ để tạo ra nhiều kênh riêng biệt.