Nội dung bài viết
Video học lập trình mỗi ngày
xxxx_CHAT là một ý tưởng từ sự kiện "TELE bị cấm...", kiến trúc một app CHAT nó có phức tạp không? Có những chức năng gì cần phải xem xét... Nhiều, nhưng hãy đi từ từ, không ai có thể thiết kế QUY TRÌNH chuẩn ngay từ đầu, hãy đi và cảm nhận.
Trong kỹ thuật phát triển Application đặc biệt là app về realtime giống như Messenger, WhatsApp, Line... Thì việc duy trình trạng thái online, offline giữa các User (Friends) hay Group (Chat Group) luôn đòi hỏi tính nhất quán MẠNH là một vấn đề kỹ thuật khó giải quyết trong phát triển app CHAT...
Status Online, Offline duy trì như thế nào?
Bài viết này dựa vào Triển khai APP CHAT từ đầu như thế nào? (1) để mô tả lại quá trình một hoạt động của một User X khi Login vào hệ thống, giả sử rằng X
có 4 người bạn đó là Y, Z, W, V
. Câu hỏi làm sao để có được trạng thái của X nhanh nhất theo realtime khi Online và Offline?
Kịch bản số 1: Khi User X -> Login -> Success
thì làm thế nào X biết được bạn bè của mình Y, Z, W, V
có những ai đang Online?
Kịch bản số 2: Khi User X -> Login -> Success
thì làm thế nào bạn bè của X bao gồm Y, Z, W, V
biết được X
vừa mới Online
?
Kịch bản số 3: Khi User X -> Logout -> Success
thì làm thế nào bạn bè của X bao gồm Y, Z, W, V
biết được X
vừa mới Offline
?
Bạn hãy thử chậm lại và suy nghĩ? Câu trả lời nằm dưới bài viết nếu thực sự bạn cần.
Dữ liệu chat trong group được tổ chức như thế nào?
Tất nhiên còn nhiều việc phải làm, liệu quá sớm khi nói đến tổ chức dữ liệu không? Tôi nghĩ là không? Nên tăng tốc nếu có thể.
Và chúng ta sẽ được nghỉ ngơi sớm sau khi về đích trước 80% người còn lại, vì ta thuộc vào 20%.
Giả sử X tạo một Group đặt tên là GroupA, và add tất cả bạn bè của mình Y, Z, W, V
vào trong GroupA()
X -> createGroup(groupId, groupName, ...) -> createGroupMember(groupId, memberId)
Kịch bản số 1: Khi User X -> sendMsg() -> GroupA() -> Success()
thì nên tạo một box lưu trữ msg
cho toàn bộ Group, hay là mỗi thành viên là một box.
Trong keywork của kiến trúc người ta sẽ gọi 2 trường hợp này là fan out on READ
và fan out on WRITE
Vậy thực hiện thế nào, ưu điểm ra sao?
Bạn lại nghĩ tiếp xem thử? Câu trả lời nằm dưới bài viết nếu thực sự bạn cần.
Tóm tắt
Đây là một câu chuyện về phát triển app CHAT, được thiết kế trong Series với NestJS làm chủ đạo, các bạn có thể theo dõi thêm NestJS Backend: Từ a-z
Cuối cùng đây là câu trả lời: Triển khai APP CHAT từ đầu như thế nào? (1)