Я работаю над созданием back-end для службы, такой как Facebook Messenger или WhatsApp.
Я начал с этого великолепного учебника.
Я делаю это с API, написанным в Python (Django). Наряду с этим API у меня есть процесс Redis и работает сервер node.js (только для localhost). Сервер node.js использует библиотеку socket.io для обмена данными в режиме реального времени через websockets
HTTP-запрос, содержащий сообщение, может быть отправлен с любого клиента в Django API, который, в свою очередь, публикует сообщение Redis на определенном канале.
Сервер node.js подписался на канал Redis и получает уведомление, когда такое сообщение опубликовано. Node отслеживает, какие сокеты, которые в настоящее время связаны с массивом сокетов, с ключем с некоторым идентификатором пользователя.
У меня есть несколько вопросов об этом:
1. Частные сообщения
Я бы хотел отправить сообщение, адресованное определенному пользователю. Мой первоначальный подход заключается в том, чтобы HTTP-запрос (отправленный в Django) включал, какой пользователь должен достигнуть сообщения. Когда это сообщение достигнет сервера node.js(через redis), Node может найти этого пользователя в массиве клиентов. Очевидно, что Django (?) Должен знать, какой сокет socket.io принадлежит тому пользователю. то есть Django должен знать, какой ключ идентификации пользователя должен использовать Node, чтобы захватить правый сокет.
Это хороший подход? Будет ли redis-server быть узким местом, поскольку я использую только один канал публикации? Что произойдет, если целевой пользователь сообщения отключен, когда исходный пользователь отправит сообщение? Я хотел бы захватить это событие и отправить push-уведомление.
2. Номера
Эта услуга не была бы хорошей, если бы не было функций для запуска и ведения групповых разговоров. Из того, что я прочитал, я должен создать socket.io:s комнаты для этого. Тогда мой вопрос: как мне поддерживать комнату между сеансами? Что делать, если каждый пользователь, участвующий в групповом разговоре, переходит в автономный режим и тем самым удаляется из массива node.js server: s. Могу ли я каким-то образом хранить комнаты между сеансами на сервере Django?
Любая помощь и/или отзывы/мысли приветствуются. Благодаря