Giải pháp xây dựng websocket server nhiều người sử dụng 1 lúc
Em mới tìm hiểu về websocket trong golang, hiện tại em xây dựng base 1 con project chat nhóm và sau đó nâng cấp nên thành các tính năng real time khác như (game chẳng hạn),.
Khi người dùng đầu tiên connect tới server thì sẽ trả về danh sách người dùng chỉ có người đó, nhưng khi người thứ 2 kết nối tới server thì sẽ trả về danh sách về cho 2 người (gửi cho người số 2, và gửi cho người đầu tiên), hiện tại em đang test số lượng kết nối tới server khá ít nên chưa hiện ra rõ vấn đề.
Nếu người dùng thứ 1000 kết nối tới server thì sẽ phải chạy vòng lặp 1000 lần để gửi danh sách cho 1000 người dùng đang kết nối đến server.
Đây là 1 mảng khá mới đối với em nên rất mong các bác có thể góp ý cho em về giải pháp tối ưu hơn hoặc các thư viện hỗ trợ tốt và hỗ trợ việc mở rộng sau này được không ạ.
1 CÂU TRẢ LỜI
Mình thấy không nhất thiết phải chạy vòng lặp để gửi danh sách cho cả 1000 người đang kết nối tới server đâu, thông thường thì với ứng dụng realtime thì sẽ dùng pub/sub pattern, các user sẽ trong cùng nhóm chat sẽ subscribe vào cùng 1 channel khi đã subscribe thành công thì user đó có thể gửi/nhận message thông qua websocket protocol, từ đó để lấy số user đang kết nối thì chỉ cần lấy từ channel đó ra là được.
Em đang tính dùng redis pubsub liệu có ổn không bác nhỉ, em tìm kiếm trên mạng thì thấy nhiều người họ dùng redis pubsub ạ.
@xdorro project bên mình đang dùng redis pubsub và gặp vấn đề về scale khi số user tăng cao (10-20k), hiện tại chưa tìm đc solution tốt hơn, tìm hiểu thì cũng khá nhiều ae đang bị như mình:
@maitrungduc1410 thanks bác, hy vọng sẽ có cao nhân có giải pháp hay ạ )
Ngoài ra mới tìm thấy được thằng này có thể dùng kết hợp với Redis (https://centrifugal.dev), em vẫn đang tìm hiểu và nghiên cứu thêm nhiều giải pháp khác nhau