SK
1. Клиент открывает вебсокет и подключается к эндпойнту, подключение не имеет таймаута и активно пока приложение клиетна работает.
2. Вебсокет клиента (пункт 1) заносится в БД (скорее всего
redis)2. После подключения клиент получает все непрочитанные сообщения из БД (
postgres).3. При отправке сообщения клиентом в БД (пункт 2) ищется вебсокет с получателем, если его нет - сообщение заносится в БД (пункт 3) с пометкой "не доставлено"
И т.д.
Насчет самих вебсокетов я не уверен, но ничего лучше и проще я не нашел.
Возьми сервер IRC, он бесплатный и работает на ура.
Возьми модуль, наверняка есть, типа pyirc что-то.
Всё. Наслаждайся чатами.

