Задача в общем-то классическая, на эту тему много вводных статей и примеров.
Если кратко, то решить нужно две основных проблемы:
1. Доставка в реалтайме обновлений до всех заинтересованных пользователей.
2. Вывод истории предыдущих сообщений (до подключения в чат).
Есть ещё проблема с синхронизацией между устройствами, когда в чате одновременно с компа и с телефона, но это уже следующий уровень )
Проблема 1 решена много раз, используем что-то проверенное и не пишем свой велосипед, например берём Centrifugo + туториалы по нему.
Проблема 2 решается через хранение истории сообщений в базе + запрос клиента на бэкенд при подключении.
---
Итого общий сценарий для клиента:
1. Подключаемся, подписываемся на канал обновлений, запрашиваем историю.
2. Выводим историю сообщений.
3. Ловим обновления с канала и выводим новые сообщения.
---
Это если не углубляться в дебри, дальше спрашивай что интересует )