Не ругайте меня за лишние теги, пожалуйста. Умные и опытные люди слушающие данные теги послужили причиной ))
Привет, это очередной вопрос про real-time chat между пользователями. Но в этот раз вопрос чисто теоретического характера, нежели практического. Как организовать структуру месседжинга базируясь на websockets+ajax? Как я понял, websockets достаточно быстрая и шустрая технология по сравнению с лонгполлингом, так как не нужно перегружать сервер ненужными ожидающими запросами. Поправьте, если у меня не правильно сформировались убеждения))
На клиенте у меня стоит компонент Messenger в нем два блока:
1) Поле чата (Это еще один компонент Chat со своим стейтом и с keep-alive) При инициализации данного компонента осуществляется запрос на REST API. Далее этот компонент рендрит сообщения по полученным данным. Стейт внутри компонента сохранен, теперь нет надобности их подгружать снова. При повторной активации компонента, запрос на сервер не осуществляется.
2) Поле или список с последними переписками. Это тоже отдельный блок и он грузится также отдельно через REST API.
Проблема возникает тогда, когда начинаешь задумываться: "А как же обновлять данные динамически и лаконично?".
Чую, что слушать каналы(Группы) всех связей с пользователями очень глупо. Представьте, что у меня 1000 друзей и со всеми я общаюсь, так если я не один такой. Микросервис django-channels просто обкакается, да что уж django-channels, websocket такого не потянет)))
Пришла идея все делать как в вышесказанном методе, но с помаркой на websockets. Слушать только свой канал, который создается при коннекте на websockets. И когда другой пользователь отправляет сообщение он смотрит открыт ли этот канал, если да то отправить данной группе объект с новыми данными, если нет то нет смысла, если слушателя на другой стороне нет, он может при retrieve данных получить сообщения. Но можно ли узнать открыт ли канал, или нет?
В данном методе возникает проблема с менеджингом новых сообщений. Вот задумываюсь, может стоит все измененные, то-есть новые, объекты в store(vuex) хранить, а при переходе на чат подтягивать новые пришедшие данные в компонент, потом удалять их из главного стейта.
Можете подсказать?