Как уже сказали, для чатов самое оптимальное websocket, только тут всплывет что у Django с этим проблема, есть channels, но мне они очень не нравятся, выглядит как переделанный сбоку костыль.
Как сказали выше — обычно используются websockets. Это стандарт, но только почему-то во всех
бэкэнд фреймворках websocket’ы реализованы криво косо (FastApi, Django…). Как альтернативная идея можно попробовать написать API, что будет получать новые сообщения и пользоваться этим API на фронте условные каждые 10 секунд. Я бы сделал если бы не через websocket’ы, то так!