Asked Oct 9th, 7:41 AM 57 0 3
  • 57 0 3
+1

Vấn đề lưu socket của user khi đã từng kết nối tới server.

Share
  • 57 0 3

Chào mọi người. Mình đang làm một ứng dụng chat real - time, dùng Socket.io . Mình đã kết nối và gửi đc cho 1 người khác hoặc tất cả user cùng kết nối.

Vấn đề là mình chưa rõ đc các vấn đề sau:

  1. Mỗi lần 1 user kết nối tới server thì server tạo 1 socket unique cho user đó, vậy làm cách nào khi User ngắt kết nối thì mình vẫn biết là User đó và emit event tới user đó. (Lưu socket hoặc xử lí thế nào ạ).
  2. Khi 1 user send message tới 1 user khác, nhưng user đó đang offline vậy thì làm sao gửi tới user đó

Mọi người ai đã từng làm qua , có thể cho mình 1 solution ko ạ.

Thanks mọi người !

3 ANSWERS


Answered Oct 9th, 7:44 AM
Accepted
0

Vấn đề 1 thì mình ko rõ câu hỏi.

Vấn đề 2: khi user offline thì bạn gửi message qua API như bình thường. Ngay cả lúc tất cả user đều trong room có kết nối socket bạn vẫn phải kết hợp cả 2 cách nhé 😃

Share
Oct 9th, 7:49 AM

à bạn, sorry câu hỏi mình hơi khó hiểu. Đại khái là: Khi 1 user A kết nối tới server để chát với 1 User B . Rồi kết thúc trò chuyện, vậy lần sau User A mở ứng dụng lên rồi chat tiếp => server sẽ tạo cho User A 1 socket khác. Vây làm sao server biết đc socket mà user B mà gửi tin nhắn tới đc.

0
| Reply
Share
Oct 9th, 7:51 AM

@congthuongasd à kết nối socket sẽ bắt buộc thay đổi, bạn thử tính đến channel private chưa (kênh kết nối ấy)

0
| Reply
Share
Oct 9th, 7:52 AM

Nghĩa là khi đang trò chuyện, mình gửi 1 tin nhắn qua API để lưu lại , 1 cái gửi qua socket để chuyển tới người dùng, nếu người dùng ofline thì vẫn gửi, rồi khi User online thì nó lại load từ DB lại à b

0
| Reply
Share
Oct 9th, 7:54 AM

@quanghung97 mình có xem qua, nhưng chưa rõ là cái chanek có bị thay đổi ko, để mình xem lại

0
| Reply
Share
Oct 9th, 7:56 AM

@congthuongasd vấn đề 2 là load lại từ DB đó =)), kênh kết nối (channel) bạn thử search Google dùng để định danh cái room đó

0
| Reply
Share
Oct 9th, 7:58 AM

à , ok bạn. Thanks bạn nhé

0
| Reply
Share
Answered Oct 9th, 7:53 AM
0

Mình từng làm qua về node socket, không biết người khác thế nào chứ mình xử lý kiểu chày cối lắm =)) Nếu bạn có sử dụng DB như là Redis hay MongoDB thì dễ, chứ không có thì nghe chừng hơi khoai

  1. Về user thì khi một user kết nối, mình sẽ lưu lại định danh của user đó vào localstorage hoặc cookie, định danh có thể là bất cứ thứ gì, với mình thì gán đại cho nó một chuỗi hash nào đó. Tiếp tục định danh đó mình lưu vào trong MongoDB theo từng cặp user nào đang chat với user nào, ví dụ: {chat: {'user1-user2': 'noi dung tin nhan'}} Nói chung là bạn cần biết cách tổ chức cái DB nữa. Khi user ngắt kết nối thì định danh của user đó vẫn được lưu trong localstorage, khi user kết nối lại thì bạn lôi định danh này ra rồi query trong DB

  2. Việc gửi offline này tương tự như ý 1, khi 1 user nhắn tin thi bạn lưu message theo định danh như thế kia, khi user kết nối lại thì query trong DB lấy ra là được

Share
Oct 9th, 7:59 AM

Oke bạn, mình hiểu đc chút ít rồi. Thanks b nhé

0
| Reply
Share
Answered Oct 9th, 7:55 AM
0

Bạn có thể lưu lại message trong db.

Share