Skip to content

Instantly share code, notes, and snippets.

@dattp
Created June 16, 2021 08:05
Show Gist options
  • Save dattp/d606a06b7283c955c724f29f91fc1811 to your computer and use it in GitHub Desktop.
Save dattp/d606a06b7283c955c724f29f91fc1811 to your computer and use it in GitHub Desktop.
#### Cải tiến cho ứng dụng chat
* Đổi những event mà socket đang on sang api. Ví dụ như nhận tin nhắn `gui_du_lieu_chatting_guid` chuyển sang gửi tin nhắn bằng api.
* Tạo ngay `_id` trong mongo, emit socket về client và thực hiện insert tin nhắn sau.
* Tạo thêm 1 field `slug` trong bảng tin nhắn để phục vụ việc search không dấu.
#####################################################################################################################################
* handle khi sử dụng các tính năng search, ghim, bấm vào tin nhắn gốc replied.
* làm lại cơ chế skip, limit khi lấy list tin nhắn (sửa luôn các api khác cũng làm theo cơ chế này)
* phân trang theo cơ chế seeking. Dữ liệu get list ở API phải trả về thêm giá trị next cursor và pre cursor.
* trong đó next cursor sẽ là id của message `cuối cùng trong list` và pre cursor sẽ là id của message `đầu tiên trong list` (chỉ đang đang tính list trả về).
* giải pháp phân trang ở đây sẽ là đứng ở vị trí của next cursor (id mesage) và lấy tiếp bao nhiêu bản ghi (limit).
* khi query sẽ lấy ra những message tiếp theo có id < next cursor (case: sắp xếp từ mới nhất đến cũ) => tối ưu là hiệu năng cho `_id` trong mongo.
* khi next hoặc pre cursor rỗng thì coi như hết dữ liệu.
* cơ chế xử lý bên client:
* Khi user bấm vào tin nhắn ghim (search). Nếu id tin nhắn đó đang có trong list của client => xử lý scroll lên luôn.
* nếu không có id message đó. Gọi api, truyền id message lên. Server handle để trả về list data bao gồm message có id đó, 5 message mới tiếp theo và 5 message cũ ngay sau đó.
* đồng thời sẽ trả về next cursor và pre cursor, đểu nếu client có vuốt tiếp thì sẽ truyền lên cursor tương ứng.
* ở trong trường hợp call api để lấy dữ liệu của id message được ghim (search) này: Client sẽ phải làm 1 hiệu ứng giả scroll gì đó, hoặc 1 cái loading, hoặc 1 cái phân cách kiểu tia sét gì đó.
* khi có tin nhắn mới đến, realtime: thì client show 1 nút nhỏ ở 1 góc, để biểu thị việc có tin nhắn mới. Khi user bấm vào nút đó thì gọi lại api để lấy ra list tin nhắn mới nhất và quay về trạng thái ban đầu.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment