Có thể nói nhu cầu chia sẽ, kết nối giữa người với người ngày càng tang mang đến cho người sử dụng các mối quan hệ và giúp ta giải tỏa cảm xúc… Hiện nay Facebook đang là một trong
Trang 1ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG THUẬT PHẦN MỀM
Trần Diệu Bảo Trân – 17521150 Đoàn Thế Duy - 17520391
KHÓA LUẬN TỐT NGHIỆP
Xây dựng mạng xã hội chia sẻ khoảng khắc cho những
người yêu động vật Social Networking for Animal Lovers
KỸ SƯ NGÀNH KỸ THUẬT PHẦN MỀM
GIẢNG VIÊN HƯỚNG DẪN ThS Nguyễn Thị Thanh Trúc
TS Nguyễn Hà Giang
Trang 2NHẬN XÉT KHÓA LUẬN TỐT NGHIỆP (CỦA CÁN BỘ HƯỚNG DẪN/PHẢN BIỆN)
Tên khóa luận:
Xây dựng mạng xã hội chia sẻ khoảnh khắc cho những người yêu động vật
Đánh giá Khóa luận:
1 Về cuốn báo cáo:
Số trang _ Số chương _
Số bảng số liệu _ Số hình vẽ _
Số tài liệu tham khảo _ Sản phẩm _
Một số nhận xét về hình thức cuốn báo cáo:
-
2 Về nội dung nghiên cứu:
-
ĐẠI HỌC QUỐC GIA TP.HCM
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
THÔNG TIN
CỘNG HÒA XÃ HỘI CHỦ NGHĨ VIỆT NAM
Độc lập – Tự do – Hạnh phúc
Trang 33 Về chương trình ứng dụng:
-
4 Về thái độ làm việc của sinh viên:
-Đánh giá chung: Khóa luận đạt/không đạt yêu cầu của một khóa luận tốt nghiệp kỹ
sư/, xếp loại Giỏi/ Khá/ Trung bình
Trang 4ĐỀ CƯƠNG CHI TIẾT
Tên đề tài:
Xây dựng mạng xã hội chia sẻ khoảnh khắc cho những người yêu động vật
Cán bộ hướng dẫn :
ThS Nguyễn Thị Thanh Trúc - TS Nguyễn Hà Giang
Sinh viên thực hiện:
Trần Diệu Bảo Trân 17521150
Đoàn Thế Duy 17520391
Nội dung đề tài:
1 Đặt vấn đề
Ngày nay, mạng xã hội không còn xa lạ với chúng ta và nó ngày càng phát
triển mạnh mẽ Có thể nói nhu cầu chia sẽ, kết nối giữa người với người
ngày càng tang mang đến cho người sử dụng các mối quan hệ và giúp ta
giải tỏa cảm xúc… Hiện nay Facebook đang là một trong những mạng xã
hội lớn nhất để người sử dụng kết nối bạn bè hoặc cộng đồng có cùng mối
quan tâm Chính vì là một mạng xã hội lớn như vậy cho nên chúng ta rất
khó tìm được những người bạn thật sự có chung sở thích và tìm được các
ĐẠI HỌC QUỐC GIA TP.HCM
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
THÔNG TIN
CỘNG HÒA XÃ HỘI CHỦ NGHĨ VIỆT NAM
Độc lập – Tự do – Hạnh phúc
Trang 5bài viết liên quan tới những gì mà ta quan tâm Ví dụ: một người yêu thíchthú cưng thì họ chỉ muốn được hòa vào một cộng đồng những người yêuthích thú cưng như mình mà không bị chi phối bằng những bài viết khôngliên quan khác Chính vì vậy Mạng xã hội Petlove dành riêng cho nhữngngười yêu thích thú cưng sẽ giúp cho họ dễ dàng kết nối được với nhữngngười bạn có đặc điểm chung đó chính là yêu động vật
2.2 Phạm vi đối tượng
Người dùng ở mọi độ tuổi có máy tính và điện thoại thông minh, có nhu cầu tìm kiếm những người bạn có chung sở thích hoặc tìm kiếm những hình ảnh thú vị của thế giới dộng vật
3 Mô tả yêu cầu đề tài
3.1 Các yêu cầu về mặc chức năng:
● Đăng kí tài khoản để sử dụng mạng xã hội
● Đăng nhập
● Thay đổi mật khẩu
● Cập nhật trang cá nhân (thông tin cá nhân, avatar, ảnh bìa)
● Viết bài
● Like bài, comment, share bài
● Kết bạn (gửi yêu cầu, hủy yêu cầu, chấp nhận, từ chối, hủy kết bạn)
● Chat với bạn bè
Trang 6● Tìm kiếm người dùng, page, group
● Gợi ý các bạn bè, page mới, group mới
● Tạo group thảo luận, bàn bạc
● Giao diện thân thiện, dể sử dụng
● Thiết kế hợp xu hướng (trendy)
● Có responsive cho các thiết bị di động
● Database có khả năng mở rộng, truy suất nhanh
4 Nội dung thực hiện
4.1 Công nghệ sử dụng
● Front-end: EJS Engine Template : một template dựa trên HTML, CSS làm giao diện; AJAX dùng trong xử lí và tương tác giữa người dùng với hệ thống
Về phần cơ sở dữ liệu, với mục đích đề ra ban đầu, là ưu tiên về mặttốc độ truy xuất và khả năng mở rộng cực kì linh hoạt, MongoDB là sựlựa chọn của nhóm Qua tìm hiểu trên Internet, do đáp ứng khả năng
Trang 7“thời gian thực” của website, việc sử dụng No-SQL là thực sự cầnthiết.
5 Kết quả mong đợi
Tạo ra một trang web kết nối những người có cùng đam mê về động vật,chia sẽ, lưu giữ những khoảnh khắc đẹp đáng nhớ
Kế hoạch thực hiện:
Phân tích đề tài, yêu cầu, đề xuất danh sách chức năng
3 Xây dựng cấu trúc Database 15/03/2021 - 1/4/2021
4 Tìm hiểu các chức năng của một mạng xã
hội 15/03/2021 - 1/4/2021
5 Dựng UI Mockup 15/03/2021 - 1/4/2021
6 Tìm hiểu Realtime Chat, SocketIO cho
tính năng Chat và Notification
8/4/2021 - 5/5/2021
7 Thiết kế giao diện trang wed người dùng 8/4/2021 - 5/5/2021
8 Thiết kế giao diện web Admin 8/4/2021 - 5/5/2021
9 Tạo và kết nối database dùng MongDB
Compass và MongDB Atlas
8/4/2021 - 5/5/2021
10 Hiện thực backend và viết API cho trang
11 Gắn backend vào layout cho các tính năng 8/4/2021 - 5/5/2021
12 Responsive, optimize performance 8/4/2021 - 5/5/2021
Trang 813 Kiểm tra, fix lỗi, kiểm thử 8/4/2021 - 5/5/2021
14 Triển khai trên môi trường Internet 8/4/2021 - 5/5/2021
15 Tiếp thu feedback, cải thiện website 8/4/2021 - 5/5/2021
16 Thu thập phân tích dữ liệu, tối ưu hiển thị
thông tin trên trang người dùng 15/03/2021 - 1/4/2021
Xác nhận của CBHD
(Ký tên và ghi rõ họ tên)
TP.HCM, ngày….tháng ….năm
2021 Sinh viên
(Ký tên và ghi rõ họ tên)
LỜI CẢM ƠN
Đầu tiên, chúng em xin gởi lời cảm ơn chân thành đến tập thể quý Thầy Cô Trường Đại học Công nghệ thông tin – Đại học Quốc gia TP.HCM và quý Thầy Cô khoa Công nghệ phần mềm đã giúp cho nhóm tác giả có những kiến thức cơ bản làm nền tảng để thực hiện đề tài này
Đặc biệt, chúng em xin gửi lời cảm ơn và lòng biết ơn sâu sắc nhất tới Ths Nguyễn Thị Thanh Trúc và Ts Nguyễn Hà Giang đã hướng dẫn, hỗ trợ nhóm hoàn thành đồkhóa luận tốt nghiệp
Trang 9Trong thời gian một học kỳ thực hiện đề tài, nhóm tác giả đã vận dụng những kiến thức nền tảng đã tích lũy đồng thời kết hợp với việc học hỏi và nghiên cứu những kiến thức mới Từ đó, nhóm vận dụng tối đa những gì đã thu thập được để hoàn thành một báo cáo đồ án tốt nhất Tuy nhiên, trong quá trình thực hiện, chúng em không tránh khỏi những thiếu sót Chính vì vậy, chúng em giả rất mong nhận được những sự góp ý từ phía các Thầy Cô nhằm hoàn thiện những kiến thức mà chúng
em đã học tập và là hành trang để nhóm tác giả thực hiện tiếp các đề tài khác trong tương lai
Xin chân thành cảm ơn các quý Thầy Cô!
Trang 10Chương 2 Cơ sở lý thuyết và áp dụng công nghệ 5
2.1.2 Đặc điểm nổi bật của NodeJS 5
Trang 112.3.3 Socket io 13
3.3.4 Cập nhật thông tin cá nhân 203.3.5 Xem thông tin người dùng 21
Trang 123.3.11 Like / Bình luận / Phản hồi bình luận 22
Trang 134.2.7 Cập nhật thông tin 51
4.2.9 Đề xuất kết quả tìm kiếm 534.2.10 Like, comment, phản hồi comment 544.2.11 Gửi / Hủy lời mời kết bạn 554.2.12 Chấp nhận / Từ chới lời mời kết bạn 56
4.2.15 Like / Unlike trang 594.2.16 Gửi / Hủy lời mời tham gia nhóm 604.2.17 Chấp nhận / Từ chới lời mời tham gia nhóm 61
4.3.7 Cập nhật thông tin 684.3.8 Tìm kiếm theo keyword 694.3.9 Đề xuất theo kết quả tìm kiếm 704.3.10 Like, Share, Comment 714.3.11 Gửi / Hủy lời mời kết bạn 724.3.12 Chấp nhận / Từ chối lời mời kết bạn 73
Trang 144.3.13 Thay đổi mật khẩu 74
4.3.15 Like / Unlike trang 764.3.16 Gửi / Hủy lời mời tham gia nhóm 774.3.17 Chấp nhận / Từ chối lời mời tham gia nhóm 784.4 Thiết kế cơ sở dữ liệu 794.4.1 Class Diagram tổng quát 79
5.2.5 Thông tin chi tiết user 88
Trang 155.2.13 Tìm kiếm bạn bè 93
Kết luận và định hướng phát triển 95
Trang 16Hình 3.1 – Sơ đồ chức năng ứng dụng 17
Hình 4.1 - Usecase tổng quát ứng dụng 29Hình 4.2 – Activity diagram đăng ký thành viên 45Hình 4.3 – Activity diagram đăng nhập 46Hình 4.4 – Activity diagram đăng xuất 47Hình 4.5 – Activity diagram newfeed 48Hình 4.6 – Activity diagram xem user 49Hình 4.7 – Activity diagram đăng bài post 50Hình 4.8 – Activity diagram cập nhật thông tin 51Hình 4.9 – Activity diagram tìm kiếm thông tin 52Hình 4.10 – Activity diagram đề xuất 53Hình 4.11 – Activity diagram like, comment, reply 54Hình 4.12 – Activity diagram gửi / hủy lời mời kết bạn 55
Trang 17Hình 4.13 – Activity diagram xác nhận lời mời kết bạn 56Hình 4.14 – Activity diagram thay đổi mật khẩu 57Hình 4.15 – Activity diagram tạo trang 58Hình 4.16 – Activity diagram like / unlike trang 59Hình 4.17 – Activity diagram gửi lời mời tham gia nhóm 60Hình 4.18 – Activity diagram xác nhận tham gia nhóm 61Hình 4.20 – Sequence diagram đăng ký 62Hình 4.21 – Sequence diagram đăng nhập 63Hình 4.22 – Sequence diagram đăng xuất 64Hình 4.23 – Sequence diagram newfeed 65Hình 4.24 – Sequence diagram xem user 66Hình 4.25 – Sequence diagram đăng bài post 67Hình 4.26 – Sequence diagram cập nhật thông tin 68Hình 4.27 – Sequence diagram tìm kiếm theo keyword 69Hình 4.28 – Sequence diagram đề xuất 70Hình 4.29 – Sequence diagram like, comment, share 71Hình 4.30 – Sequence diagram gửi / hủy lời mời kết bạn 72Hình 4.31 – Sequence diagram xác nhận lời mời kết bạn 73Hình 4.32 – Sequence diagram thay đổi mật khẩu 74Hình 4.33 – Sequence diagram tạo trang 75Hình 4.34 – Sequence diagram like/unlike trang 76Hình 4.35 – Sequence diagram gửi/hủy lời mời vào nhóm 77Hình 4.36 – Sequence diagram xác nhận lời mời vào nhóm 78Hình 4.19 – Class diagram của ứng dụng 79
Hình 5.1 – Giao diện đăng nhập 86Hình 5 2 – Giao diện đăng ký thành viên 87Hình 5.3 – Giao diện trang chủ 87Hình 5.4 – Giao diện đăng bài post 88
Trang 18Hình 5.5 – Giao diện thông tin user 89Hình 5.6 – Giao diện tạo trang 89Hình 5.7 – Giao diện danh sách page 90
Hình 5.9 – Giao diện tạo danh sách nhóm 91Hình 5.10 – Giao diện tạo danh sách gửi lời kết bạn 92Hình 5.11 – Giao diện khung chat 93Hình 5.12 – Giao diện tìm kiếm bạn bè 93Hình 5.13 – Giao diện trang cá nhân 94Hình 5.14 – Giao diện thay đổi mật khẩu 95
DANH MỤC BẢNG
Bảng 4.1 – Mô tả usecase đăng ký thành viên 30Bảng 4.2 – Mô tả usecase đăng nhập 31Bảng 4.3 – Mô tả usecase đăng xuất 31Bảng 4.4 – Mô tả usecase newfeeds 32Bảng 4.5 – Mô tả usecase xem thông tin user 33Bảng 4.6 – Mô tả usecase đăng bài post 33Bảng 4.7 – Mô tả usecase cập nhật thông tin 34Bảng 4.8 – Mô tả usecase đổi mật khẩu 35Bảng 4.9 – Mô tả usecase tìm kiếm theo từ khóa 35Bảng 4.10 – Mô tả usecase đề xuất 36Bảng 4.11 – Mô tả usecase đề xuất 37Bảng 4.12 – Mô tả usecase xác nhận lời mời kết bạn 37Bảng 4.13 – Mô tả usecase like / unlike trang 38Bảng 4.14 – Mô tả usecase chat 39Bảng 4.15 – Mô tả usecase gửi lời mời tham gia nhóm 39Bảng 4.16 – Mô tả usecase xác nhận lời mời vào nhóm 40Bảng 4.17 – Mô tả usecase tạo fanpage 41
Trang 19Bảng 4.18 – Mô tả usecase tạo nhóm 42Bảng 4.19 – Mô tả usecase like / unlike bài post 42Bảng 4.20 – Mô tả usecase chia sẽ bài post 43Bảng 4.21 – Mô tả usecase comment bài post 44Bảng 4.22 – Mô tả usecase phản hồi comment 44
Bảng 4.24 – class notification 81
Bảng 4.26 – class friend object 81
Bảng 4.30 – class liker object 83Bảng 4.31 – class share object 83Bảng 4.32 – class comment object 83Bảng 4.33 – class reply object 84Bảng 4.34 – Các điều kiện ràng buộc 84
Trang 20DANH MỤC TỪ VIẾT TẮT
JWT JSON Web Token
CO Constraint
DE Dependency
Trang 21TÓM TẮT KHÓA LUẬN
Ngày nay mạng xã hội trở nên vô cùng phổ biến và được sử dụng bởi một cộng đồng lớn Mạng xã hội có nhiểu chức năng khác nhau, nhưng mục đích cốt lõi là chia sẽ những khoảng khắc đẹp, ý nghĩa về một câu chuyện mà người dùng muốn cho mọi người cùng hưởng ứng Với những năm gần đây, việc một vấn đề nào đó trở nên trở thành xu hướng nhanh chóng (trending) , đồng thời mạng xã hội là công cụ nhanh chóng nhất để truyền đạt tin tức đó.
Mạng xã hội cũng được chia thành nhiều loại với nhiều mục đích khác nhau Facebook là đại diện cho mạng xã hội tin tức, Instagram cũng là một biến thể của mạng xã hội tin tức, nhưng dữ liệu chính là hình ảnh Youtube, Tiktok là đại diện cho mạng xã hội video kèm theo tính năng xu hướng (trend) Theo đó, bên cạnh cácmạng xã lớn như trên, có tồn tại các mạng xã hội ngách tập trung vào một số lượng nhỏ người dùng có chung sở thích nhận được không ít sự đón nhận của cộng đồng Chính vì thấy mạng xã hội ngách này tập trung vào một nhóm đối tượng nhất định
mà không bị những “ông lớn” đè nặng, chúng em đã xây dựng nên mạng xã hội Petpedia dành riêng cho những người yêu thích thú cưng cũng như các loài động vậtbằng cách áp dụng nền tảng NodeJS và cơ sở dữ liệu mã nguồn mở MongoDB Để thực hiện tốt đề tài này, chúng em đã tham khảo mạng xã hội dành cho thú cưng mang tên “DruzhOK” – nghĩa là “Người bạn nhỏ” được phát triển tại Nga và quyết định xây dựng mạng xã hội dành cho thú cưng tại Việt Nam Kết thúc đề tài, nhóm chúng em đã đạt được kết quả:
● Học và sử dụng thành thạo nền tảng NodeJS
● Xây dựng được một ứng dụng mạng xã hội
Trang 22CHƯƠNG 1 MỞ ĐẦU
1.1 Đặt vấn đề
Các trang mạng xã hội là một hình thức giao tiếp của con người ngày càng mởrộng nhanh chóng Chúng được định nghĩa là “Những địa điểm ảo phục vụ cho một nhóm dân cư cụ thể, trong đó là những người cùng sở thích tụ tập giao tiếp, chia sẽ
và thảo luận về ý tưởng” Người ta đã đề xuất rằng sự thay đổi trong giao tiếp của con người đã tạo ra một nền vắn hóa kỹ thuật số, một phương pháp độc đáo để chia
sẽ các chuẩn mực xã hội và quản lý hành vi Văn hóa này có thể có các tác động tích cực và tiêu cực Tuy nhiên, chúng ta không thể phủ định sự độc đáo của văn hóa này đó chính là khả năng chia sẽ của nó Một nghiên cứu cho rằng “sự hài lòng xã hội”, “Số lượt thích”, “Bình luận” và “Chia sẽ” của một bài đăng nhận được là động lực tích cực của hoạt động chia sẽ trên mạng xã hội Điều này không có gì đáng ngạc nhiên vì hành vi của con người được trung gian mạnh mẽ bởi danh tiếng xã hội và các tương tác Mạng xã hội cung cấp cơ chế để mọi người đánh giá nhữngđóng góp cho cộng đồng của họ
Khi người dùng sử dụng mạng xã hội Facebook để ghi lại mối quan hệ của họ vớinhững người khác thì mạng xã hội dành cho thú cưng Petpedia được tập trung sử dụng để mô tả, xây dưng cộng đồng chia sẽ các khoảng khắc giữa người với thú cưng cũng như những loại động vật khác.Với xu hướng sở hữu cho mình thú cưng ngày càng gia tăng, vật nuôi ngày càng trở nên gắn bó với đời sống của mỗi người Việc có những bức ảnh ngộ nghĩnh đáng yêu của các giống loài trên những thiết bị
và tải lên những nền tảng giải trí cũng tang Petpedia được tạo ra để phục vụ cho những người muốn khoảng khắc sống động bên nhau mỗi ngày Facebook cho phéptạo nhóm để người dung theo dõi, nhưng vì đó là mạng xã hội hướng tới đối tượng
là mọi người, ai cũng có thể dùng mạng xã hội cho nên sẽ rất khó để kiểm soát cho một cộng đồng ví dụ như công đồng những người yêu thích thú cưng Việc mất kiểm soát nội dung sẽ mau chóng làm cho những người thật sự yêu thích thú cưng
Trang 23sẽ cảm thấy đó không còn là nơi lý tưởng để giao lưu Khảo sát cho thấy, đa số những người dùng mạng xã hội tham gia vào một cộng đồng thú cưng chủ yếu là tìm kiếm những lời khuyên, sự giúp đỡ cho thú cưng của họ thì họ cần một cộng đồng “sạch” để tin tưởng chia sẽ Tuy nhiên, việc nhấn mạnh ở đây là chúng ta thu hẹp phạm vi người dùng tạo các bài đăng và nhận xét để mạng lại các cộng đồng đáng tin cậy.
Bản thân nhóm chúng em là những người yêu thích thú cưng nên việc tạo ra một cộng đồng mạng lành mạnh, sạch, có cùng chung sở thích đã thúc đẩy động lựccho chúng em quyết định xây dựng mạng xã hội thú cưng mang tên Petpedia
1.2 Mục tiêu đề tài
• Áp dụng các công nghệ về xây dựng web application để tạo ra một sản phẩm hoànchỉnh, có khả năng sử dụng trong thực tế Nghiên cứu các khía cạnh, vấn đề, giải pháp và quy trình tạo ra một mạng xã hội
• Tạo ra một trang web kết nối những người có cùng đam mê về động vật, chia sẽ, lưu giữ những khoảnh khắc đẹp đáng nhớ, lan tỏa đam mê
• Tạo ra các nhóm, trang để chia sẽ kinh nghiệm các vấn đề liên quan tới chăm sóc, nuôi dưỡng hay mua bán thú cưng
• Nghiên cứu, đề xuất các bài viết, hội nhóm phù hợp đến sở thích của người dùng
• Tối ưu hóa trải nghiệm người dùng, hệ thống chạy nhanh ổn định, realtime chat
• Thu hút được số lượng lớn người dùng sử dụng
• Tìm hiểu các vấn đề về bảo mật thông tin, mã hóa dữ liệu, truyền thông tin bảo mật giữa server với client
1.3 Đối tượng và phạm vi nghiên cứu 1.3.1 Đối tượng
• Tất cả các người dùng mạng xã hội, giới trẻ hiện nay
• Những người có đam mê, yêu thích động vật muốn chia sẽ, lan toa tinh thần đến với cộng đồng
Trang 241.3.2 Phạm vi nghiên cứu
● Về không gian: ở Việt Nam và trên thế giới
● Về thời gian: xu hướng thiết kế web,công nghệ, nhu cầu về mạng xã hội từ2019- nay
1.4 Cấu trúc khóa luận
Các phần còn lại của khóa luận có cấu trúc như sau:
Chương 2 : Cơ sở lý thuyết và công nghệ - trình bày nền tảng NodeJS, cơ sở dữ
liệu mã nguồn mở MongoDB
Chương 3: Phân tích yêu cầu – chương này sẽ phân tích các ứng dụng như đặc tả
yêu cầu, kiến trúc ứng dụng
Chương 4: Thiết kế và xây dựng ứng dụng – chương này sẽ có các thiết kế của ứng
dụng như: cơ sở dữ liệu và các biểu đồ
Chương 5: Kết quả
Kết luận và định hướng phát triển
Trang 25Chương 2 Cơ sở lý thuyết và áp dụng công nghệ
2.1 Nền tảng NodeJS 2.1.1 Giới thiệu chung
Node.js là một mã nguồn mở, một môi trường cho các máy chủ và ứng dụng mạng Node.js sử dụng Google V8 JavaScript engine để thực thi mã, và một tỷ lệ lớn các mô-đun cơ bản được viết bằng JavaScript Các ứng dụng node.js thì được viết bằng JavaScript phục vụ cho việc viết các ứng dụng trên Internet có khả năng mở rộng đặc biệt là ứng dụng web Node.js chứa một thư viện built-in cho phép các ứng dụng hoạt động như một Webserver mà không cần phần mềm như Nginx, Apache HTTP Server hoặc IIS.Mọi hàm trong Node.js là không đồng bộ (asynchronous)
Do đó, các tác , vụ đều được xử lý và thực thi ở chế độ nền (background
processing)
Hình 2.1 - NodeJS (Nguồn: https://jobpro.vn/bai-viet/node-js-la-gi/)
2.1.2 Đặc điểm nổi bật của NodeJS
Đặc điểm nổi bật của Node.js là nó nhận và xử lý nhiều kết nối chỉ với một single-thread Điều này giúp hệ thống tốn ít RAM nhất và chạy nhanh nhất khi không phải tạo thread mới cho mỗi truy vấn giống PHP Ngoài ra, tận dụng ưu điểmnon-blocking I/O của Javascript mà Node.js tận dụng tối đa tài nguyên của server
mà không tạo ra độ trễ như PHP
Trang 26Shelling tools unix NodeJS sẽ tận dụng tối đa Unix để hoạt động Tức làNodeJS có thể xử lý hàng nghìn Process và trả ra 1 luồng khiến cho hiệu xuấthoạt động đạt mức tối đa nhất và tuyệt vời nhất Streamming Data (Luồng dữliệu) Các web thông thường gửi HTTP request và nhận phản hồi lại (Luồng dữliệu) Giả xử sẽ cần xử lý 1 luồng giữ liệu cực lớn, NodeJS sẽ xây dựng cácProxy phân vùng các luồng dữ liệu để đảm bảo tối đa hoạt động cho các luồngdữ liệu khác.
Ứng dụng Web thời gian thực Với sự ra đời của các ứng dụng di động &HTML 5 nên Node.js rất hiệu quả khi xây dựng những ứng dụng thời gian thực(real-time applications) như ứng dụng chat, các dịch vụ mạng xã hội
2.1.3 Lý do sử dụng NodeJS
NodeJS được viết bằng ngôn ngữ Jacascript nên việc xử lý JSON dễ dàng hơn.NodeJS hỗ trợ giao thức TCP vì vậy chúng ta dễ dàng xây dựng bất kỳ một
phương thức custom nào
Ứng dụng thời gian thực (Realtime) Đó là một trong những ưu điểm tốt nhất của NodeJS trong việc giao tiếp giữa máy chủ và máy khách Thay vì phải tiếp nhận và
xử lý thông tin thay đổi một cách tuần tự của máy chủ, NodeJS sẽ xử lý sự thay đổi
đó ngay lập tức và gửi thông tin đó đến các máy khách khác
Máy chủ hướng sự kiện (Event-driven server) thường có một luồng duy nhất quản
lý tất cả các kết nối đến máy chủ Luồng sử dụng lệnh gọi hệ thống select () để đồngthời đợi các sự kiện trên các kết nối này
Khi một lệnh gọi select () trả về, vòng lặp chính của máy chủ sẽ gọi các trình xử lý sự kiện cho từng bộ mô tả sẵn sàng Các trình xử lý này thực hiện nhiều tác vụ khác nhau tùy thuộc vào bản chất của sự kiện cụ thể Ví dụ: khi một socket được sử dụng để lắng nghe các kết nối mới sẵn sàng, trình xử lý tương ứng gọi accept () để trả về một bộ mô tả tệp cho kết nối mới Các trình
xử lý được gọi khi một kết nối sẵn sàng để đọc hoặc ghi, thực hiện đọc hoặc
Trang 27ghi thực tế vào bộ mô tả thích hợp Việc thực thi các trình xử lý có thể gây raviệc thêm hoặc xóa các bộ mô tả khỏi tập hợp do máy chủ quản lý.
Máy chủ hướng sự kiện nhanh vì chúng không có khóa hoặc chi phí chuyểnđổi ngữ cảnh Cùng một luồng quản lý tất cả các kết nối và tất cả các trình xử
lý được thực thi đồng bộ giúp việc xử lý nhiều kết nối khác nhau một cách dễdàng hơn Tuy nhiên, một máy chủ đơn luồng không thể khai thác bất kỳ sự đồng thời thực sự nào trong luồng tác vụ Do đó, trên các hệ thống đa xử lý, máy chủ hướng sự kiện có nhiều luồng như bộ xử lý
Hình 2.2– Event-driven
2.2 MongoDB 2.2.1 Giới thiệu
MongoDB là một cơ sở dữ liệu mã nguồn mở và là cơ sở dữ liệu NoSQL(*) hàng đầu, được hàng triệu người sử dụng MongoDB được viết bằng C++
Ngoài ra, MongoDB là một cơ sở dữ liệu đa nền tảng, hoạt động trên các khái niệm
Trang 28mở rộng dễ dàng MongoDB đã trở thành một trong những NoSQL database nổi trội nhất bấy giờ, được dùng làm backend cho rất nhiều website như eBay,
SourceForge và The New York Times
Các feature của MongoDB gồm có:
• Các ad hoc query: hỗ trợ search bằng field, các phép search thông thường, regular expression searches, và range queries
• Indexing: bất kì field nào trong BSON document cũng có thể được index
•Replication: có ý nghĩa là “nhân bản”, là có một phiên bản giống hệt phiên bản đang tồn tại, đang sử dụng Với cơ sở dữ liệu, nhu cầu lưu trữ lớn, đòi hỏi cơ sởdữ liệu toàn vẹn, không bị mất mát trước những sự cố ngoài dự đoán là rất cao Vì vậy, người ta nghĩ ra khái niệm “nhân bản”, tạo một phiên bản cơ sở dữ liệu giống hệt cơ sở dữ liệu đang tồn tại, và lưu trữ ở một nơi khác, đề phòng có sự cố
• Aggregation: Các Aggregation operation xử lý các bản ghi dữ liệu và trả vềkết quả đã được tính toán Các phép toán tập hợp nhóm các giá trị từ nhiều
Document lại với nhau, và có thể thực hiện nhiều phép toán đa dạng trên dữ liệu đã được nhóm đó để trả về một kết quả duy nhất Trong SQL, count(*) và GROUP BY
là tương đương với Aggregation trong MongoDB
• Lưu trữ file: MongoDB được dùng như một hệ thống file tận dụng những function trên và hoạt động như một cách phân phối qua sharding
Trang 292.2.2 Các hoạt động của MongoDB
Hình 2.3 – Cách hoạt động của mongoDBMongoDB hoạt động dưới một tiến trình ngầm service, luôn mở một cổng (Cổng mặc định là 27017) để lắng nghe các yêu cầu truy vấn, thao tác từ các ứng dụng gửi vào sau đó mới tiến hành xử lý Mỗi một bản ghi của MongoDB được tự động gắn thêm một field có tên “_id” thuộc kiểu dữ liệu ObjectId mà nó quy định để xác địnhđược tính duy nhất của bản ghi này so với bản ghi khác, cũng như phục vụ các thao tác tìm kiếm và truy vấn thông tin về sau Trường dữ liệu “_id” luôn được tự động đánh index (chỉ mục) để tốc độ truy vấn thông tin đạt hiệu suất cao nhất
Mỗi khi có một truy vấn dữ liệu, bản ghi được cache (ghi đệm) lên bộ nhớ Ram,
để phục vụ lượt truy vấn sau diễn ra nhanh hơn mà không cần phải đọc từ ổ cứng.Khi có yêu cầu thêm/sửa/xóa bản ghi, để đảm bảo hiệu suất của ứng dụng mặc định MongoDB sẽ chưa cập nhật xuống ổ cứng ngay, mà sau 60 giây MongoDB mới thực hiện ghi toàn bộ dữ liệu thay đổi từ RAM xuống ổ cứng
Trang 30• Không có cơ chế transaction (giao dịch) để phục vụ các ứng dụng ngân hàng.
• Dữ liệu lấy RAM làm trọng tâm hoạt động vì vậy khi hoạt động yêu cầu một bộ nhớ RAM lớn
• Mọi thay đổi về dữ liệu mặc định đều chưa được ghi xuống ổ cứng ngay lập tức
vì vậy khả năng bị mất dữ liệu từ nguyên nhân mất điện đột xuất là rất cao
2.2.5 Trường hợp sử dụng
Nên sử dụng trong trường hợp sau:
Nếu website của bạn có tính chất INSERT cao Bởi vì mặc định MongoDB có sẵn
cơ chế ghi với tốc độ cao và an toàn.Website của bạn ở dạng thời gian thực nhiều, nghĩa là nhiều người thao tác với ứng dung Nếu trong quá trình load bị lỗi tại một điểm nào đó thì nó sẽ bỏ qua phần đó nên sẽ an toàn
Website bạn có nhiều dữ liệu quá Giả sử web bạn có đến 10 triệu records thì đó làcơn ác mộng với MYSQL Bởi vì MongoDB có khả năng tìm kiến thông tin liên quan cũng khá nhanh nên trường hợp này nên dùng nó
Máy chủ không có hệ quản trị CSDL Trường hợp này thường bạn sẽ sử dụng SQLITE hoặc là MongoDB
2.2.6 MongoDB Atlas
Mongodb Atlas là một giải pháp phần mềm Database as a Service Provider có chức năng và chi phí hoàn toàn phù hợp cho mọi doanh nghiệp từ nhỏ đến vừa và đến lớn Khi đó, phần mềm MongoDB Atlas sẽ được đánh giá bởi tất cả các người
Trang 31dùng lẫn với chuyên gia trong các lĩnh vực Database Software Giai3 pháp này hộ trợ trong việc đồng bộ data giữa các thành viên trong quá trình xây dựng web.
2.3 Các thư viện, package và công cụ liên quan 2.3.1 ExpressJS
Express js là một framework mã nguồn mở và miễn phí cho Node.js Express
js được sử dụng để thiết kế và xây dựng các ứng dụng web một cách nhanh chóng, Express được sử dụng cùng với NodeJS, Angular/React, cùng với
MongoDB, tạo thành các chuẩn thiết kế MEAN/MERN stack phổ biến hiện nay Trong đề tài Express dùng để routing đến các trang khác nhau của website, hỗ trợ việc render layout
Hình 2.4 – Cách hoạt động của ExpressJS
Có thể thấy từ hình trên, khi yêu cầu đi vào máy chủ, Express sẽ xử lý nó thành lệnh gọi lại mà không chặn ngăn xếp chính Nếu tưởng tượng rằng người dùng cần truy xuất một số dữ liệu từ tệp hoặc cơ sở dữ liệu, quá trình như vậy có thể tốn rất nhiều thời gian Máy chủ trung bình sẽ chặn tất cả các yêu cầu khác cho đến khi các dữ liệu này được phân phối
Mongoose là phần bổ trợ trình điều khiển Mongo, hoàn toàn phù hợp với hệ sinh thái Express Ưu điểm chính của MongoDB là nó được định hướng
Trang 32JavaScript Nó có nghĩa là trình điều khiển chuyển tất cả dữ liệu người dùng có
mà không mất thời gian vào việc điều chỉnh chúng cho môi trường lập trình MongoDB được phát triển cho các máy chủ hướng dữ liệu mở rộng
Mỗi yêu cầu trong MongoDB được xử lý theo cách tương tự như trong lệnh gọi lại Nó có nghĩa là máy chủ không phải đợi (chặn) cho đến khi dữ liệu nhất định được chuyển và xử lý đồng thời các yêu cầu khác Điều này cực kì quan trọng bởi vì cơ sở dữ liệu mở rộng quy mô có thể đươc đặt trên một hoặc một số máy chủ từ xa, cho nên việc truy xuất dữ liệu từ chúng sẽ tiết kiệm thời gian.Tóm lại, Server nhận yêu cầu và đăng ký xử lý dữ liệu sự kiện Sau đó, sự kiện sẽ gửi yêu cầu đến máy chủ Mongo từ xa Sau khi hoàn tất, cần một khoảng thời gian để dữ liệu quay lại và đồng thời máy chủ xử lý yêu cầu khác Khi dữ liệu đến, trình điều khiển Mongo gọi trình xử lý yêu cầu đến người dùng Trình
xử lý yêu cầu người dùng cung cấp dữ liệu trở lại máy khách
2.3.2 JWT (JSON Web Token)
JWT là một chuẩn mở (RFC 7519) định nghĩa một cách nhỏ gọn và khép kín
để truyền một cách an toàn thông tin giữa các bên dưới dạng đối tượng JSON Thông tin này có thể được xác minh và đáng tin cậy vì nó có chứa chữ ký số JWTs có thể được ký bằng một thuật toán bí mật (với thuật toán HMAC) hoặc một public / private key sử dụng mã hoá RSA.(Nguồn: techmaster.vn) Mục đích
sử dụng JWT không phải để ẩn dữ liệu mà để d9am4 bảo tính xác thực của dữ liệu như là xác thực user đăng nhập, phục vụ cho việc routing website chính xác
Trang 33Hình 2.5 – Cách hoạt động của JWTNhà cung cấp danh tính IdP tạo JWT xác nhận danh tính người dùng và máy chủ tài nguyên giải mã và xác minh xác thực của mã thông báo bằng cách sử dụng public key Người dùng đăng nhập bằng username và mật khẩu hoặc đăng nhập bằng Google hay Facebook Máy chủ sẽ xác thực thông tin đó và cấp một JWT được ký hiệu bằng cách sử dụng private key User client sử dụng JWT để truy cập các tài nguyên được bảo vệ bằng cách chuyển JWT trong hình thức xác thực HTTP Sau đó, máy chủ tài nguyên sẽ xác minh tính xác thực của token bằngcách sử dụng private key.
2.3.3 Socket io
Socket.IO được tạo ra vào năm 2010 Nó được phát triển để sử dụng các kết nối
mở để tạo điều kiện giao tiếp thời gian thực
Socket.IO cho phép giao tiếp hai chiều giữa máy khách và máy chủ Truyền thônghai chiều được bật khi máy khách có Socket.IO trong trình duyệt và máy chủ cũng
Trang 34đã tích hợp gói Socket.IO Mặc dù dữ liệu có thể được gửi ở một số dạng, nhưng JSON là đơn giản nhất.
Hình 2.6 – Sự tương tác của socket.ioSocket.IO gợi nhớ đến WebSockets WebSockets cũng là một triển khai trình duyệt cho phép giao tiếp hai chiều, tuy nhiên, Socket.IO không sử dụng điều này làm tiêu chuẩn Đầu tiên, Socket.IO tạo một kết nối thăm dò dài hạn bằng cách sử dụng xhr-polling Sau đó, khi điều này được thiết lập, nó sẽ nâng cấp lên phương thức kết nối tốt nhất hiện có Trong hầu hết các trường hợp, điều này sẽ dẫn đến kết nối WebSocket
Một cách phổ biến để chứng minh giao tiếp hai chiều mà Socket.IO cung cấp là một ChatApp cơ bản Với socket, khi máy chủ nhận được thông báo mới, nó sẽ gửi đến máy khách và thông báo cho họ, bỏ qua việc phải gửi yêu cầu giữa máy khách
và máy chủ Một ứng dụng trò chuyện đơn giản cho thấy cách này hoạt động
Trang 35Hình 2.7 socket.io hoạt động trong ChatApp
2.3.5 EJS template engine
● Là một template engine phổ biến, kết hợp rất tốt với expressjs, tạo nên một website với tính ổn định cao
● Hỗ trợ render phần view của ứng dụng web
● Kết hợp với expressjs trong việc trả về layout tương ứng với API
Trang 36Chương 3 Phân tích yêu cầu
3.1 Mục đích
Mục đích của của việc đặc tả yêu cầu phần mềm này là cho người đọc có cái nhìn tổng quan toàn bộ các yêu cầu chức năng cũng như các yêu cầu phi chức năng của một mạng xã hội dành cho những người yêu thú cưng
3.1.1 Phạm vi và các chức năng của ứng dụng
Petpedia cho phép người dùng có nhu cầu sử dụng mạng xã hội để chia sẽ các khoảng khắc cũng như những bài viết liên quan tới động vật nói chung và thú cưng nói riêng cho một nhóm cộng đồng có cùng chung sở thích Mạng xã hội thú cưng này giúp mọi người có chung sở thích duy trì mối quan hệ với nhau, chia sẽ hình ảnh, video, và nhắn tin với nhau Bên cạnh đó, người dùng sẽ được tiếp cận với những người bạn mới, những người mà ta chưa từng gặp trước đây
Sơ đồ chức năng ứng dụng :
Trang 37Hình 3.1 – Sơ đồ chức năng ứng dụng
Trang 383.2 Tổng quan đề tài 3.2.1 Bối cảnh
Mạng xã hội cho phép người dùng kết nối với gia đình, bạn bè từ khắp mọi miền đất nước Nó cung cấp nền tảng toàn cầu cho người dùng khắp các nước có thể liên kết với nhau Người dùng dùng mạng xã hội để chia sẽ hình, video, bài blog và là phương tiện để nhắn tin trò truyện Bên cạnh đó, mạng xã hội còn cung cấp phạm vicho việc quảng cáo Petpedia là một sản phẩm mạng xã hội độc lập và đây cũng là bản phát hành đầu tiên của sản phẩm
3.2.2 Chức năng sản phẩm
Người dùng có thể đăng ký để trở thành thành viên của mạng xã hội này và đăng nhập bất cứ lúc nào Người dùng có thể tự do tạo trang cá nhân, thêm, chỉnh sửa tùythích các thông tin cá nhân Với mạng xã hội này, người dùng có thể liên kết được với gia đình cũng như bạn bè ở bất kì nơi đâu, bất cứ lúc nào Ngoài ra, người dùng tự do tìm kiếm bạn bè và sẽ được đề xuất kết bạn thông qua những lần tìm kiếm cácmục có liên quan tới những người bạn đó
3.2.3 Phạm vi lớp người dùng
Ứng dụng dành cho những thuộc mọi giới tính, độ tuổi, quốc tịch có điều kiện sử dụng được máy tính Bên cạnh đó, người dùng nên có kiến thức nần tảng về máy tính Giao diện người dùng hiện tại là tiếng Anh nên đòi hỏi người dùng có kiến thức đọc hiểu Tiếng Anh từ mức cơ bản
3.2.4 Môi trường hoạt động
Yêu cầu phần cứng
● RAM :4GB trở lên
Yêu cầu phần mềm
● Hệ điều hành Windows 10 64-bit / Ubuntu 20.04 64-bit
● Ngôn ngữ lập trình :
● Công nghệ Web:
● Back-End
● Web Server
Trang 393.2.5 Ràng buộc về thiết kế và triển khai
CO-01 Website hỗ trợ nhựng trình duyệt web sau: Windows Internet
Explorer phiên bản 7,8 và 9; Firefox phiên bản 12 tới 26;Google Chrome mọi phiên bản; Opera mọi phiên bản
CO-02 Giao diện website hỗ trợ bằng tiếng Anh
CO-03 Phiên bản đầu tiên sẽ hoạt động tốt nhất ở trình duyệt trên
desktop
3.2.6 Các yếu tố bên ngoài cần thiết
DE-01 Những nơi có Internet thông qua mạng Lan, 3g, 4g hoặc wifi.DE-02 Đòi hỏi người dùng có kiến thức cơ bản về tiếng Anh
DE-03 Người dùng cần có kiến thức chung về máy tính và InternetDE-04 Máy chủ của hệ thống phải có khả năng xử lý đồng thời tất cả
các yêu cầu gửi đến
3.3 Đặc tả yêu cầu chức năng 3.3.1 Đăng kí:
Name – Đăng ký tài khoản người dùng
Mô tả: user sẽ tạo tài khoản nếu như user này chưa có tài khoản cho ứng dụng này User cần cung cấp thông tin như họ tên, username, email, giới tính và mật khẩu Chú ý email được sử dụng để đăng ký phải là email đã được xác thực đúng chuẩn Đây là những mục cần phải được cung cấp để có thể tiếp tục công việc tạo tài khoảncho user User sẽ được cấp tài khoản sau khi thông tin cá nhân được xác thực Điều kiện trước – Không có
3.3.2 Đăng nhập
Name – Đăng nhập
Mô tả: user phải được cấp tài khoản mới có thể thực hiện đăng nhập user nhập email và password để đăng nhập vào Mật khẩu được nhập vào phải trùng với mật khẩu được lưu trên tập dữ liệu của hệ thống
Trang 40Điều kiện trước: Người dùng phải có tài khoản đã được tạo
3.3.3 Thay đổi mật khẩu
Name – Thay đổi mật khẩu
Mô tả: Để thay đổi mật khẩu, người dùng hãy nhập mật khẩu hiện tại, mật khẩu mới
và xác nhận mật khẩu mới Mật khẩu hiện tại phải trùng với mật khẩu đang được lưu ở tập dữ liệu của hệ thống Mật khẩu mới và xác nhận mật khẩu mới phải trùng nhau Sau khi thay đổi thành công, mật khẩu mới sẽ được cập nhật vào tập dữ liệu của hệ thống
Điều kiện trước – Người dùng phải đăng nhập
3.3.4 Cập nhật thông tin cá nhân
Name – Cập nhật thông tin cá nhân
Mô tả: Đây là một phần của việc dựng nên trang cá nhân của user User cập nhật những thông tin chi tiết như họ tên, email, nghề nghiệp, năm sinh, thành phố đang sinh sống và hỉnh ảnh avatar Trong đó thông tin hộ tên và email là những buộc bắt buộc nhập trong khi đó các mục còn lại thì tùy ý người dùng
Điều kiện trước - Người dùng phải đăng nhập
3.3.5 Xem thông tin người dùng
Name – Xem thông tin người dùng
Mô tả : Bất cứ user nào cũng có thể thấy được thông tin các user khác
Điều kiện trước – Người dùng phải có tài khoản đã được tạo, Người dùng phải đăngnhập
3.3.6 Kết bạn
Name – Kết bạn
Mô tả: Các user có thể gửi lời mời kết bạn tới mọi user khác hoặc hủy lời mời kết bạn Sau khi gửi lời mời, đối phương sẽ nhận được yêu cầu và lựa chọn kết bạn với người gửi
Điều kiện trước – Người dùng phải có tài khoản đã được tạo