Есть чат, написанный на
Socket.io+Node.js+Redis.
Сделано все следующим образом: при заходе на страницу создается новое сокет-соединение и emit события (auth), после этого на сервере создается sub redis с идентификатором по ID пользователя и создается новая socket комната. При отправке сообщения передается в channel - id пользователя и сообщение. Sub.on выступает в качестве приема сообщений и отправляет в сокет канал.
В связи с тем, что pub/sub не умеет хранить историю сообщение, появился вопрос: как сделать хранение сообщений на redis, но использовать pub/sub (поскольку позволяет легко масштабироваться).
sub.on('message', (channel, message) => {
io.to(channel).emit('message', message)
})
io.on('connection', socket => {
let uID = null;
socket.on('auth', userID => {
uID = userID
sub.subscribe(userID)
socket.join(userID)
})
socket.on('message', data => {
pub.publish(data.userID, data.msg)
})
});