Какая архитектура подойдет для моего мобильного приложения Chat в данной ситуации?

Я разрабатываю приложение для android, подключающееся к бэкенду django. Мой сервер django в AWS уже имеет собственную базу данных mysql. (Firebase используется для аутентификации по sns). Теперь мне нужно добавить функции чата в это приложение. Оно включает групповой чат, но, вероятно, многие пользователи могут использовать чат 1:1.

Мой вопрос заключается в том, какая архитектура подходит для мобильного приложения Chat? Варианты, о которых я сейчас думаю...

  1. Сообщения чата хранятся в базе данных mysql в AWS, а сервер уведомляет о сообщении только с помощью FCM (Firebase cloud messaging). Все текстовые, графические или голосовые ссылки будут находиться в полезной нагрузке для FCM. Пользователь может войти в систему только на одном устройстве одновременно. (Если этот вариант не имеет критических проблем с производительностью, я думаю, что это простой способ, потому что у меня уже есть бэкэнд с базой данных, и мне не нужно заботиться о том, находится ли мобильное приложение пользователя на переднем плане или в фоновом режиме. Если приложение должно показывать сообщения, когда чат (канал) установлен на стяжке, иначе просто используется лоток уведомлений)
  2. .
  3. Использовать базу данных Firebase Realtime только для функций чата. Это реальное время, но мне нужно создать дополнительную базу данных в Firebase, и я не уверен, как обрабатывать сообщения, когда приложение находится в фоновом режиме.
  4. Сообщения чата хранятся в базе данных mysql в AWS. И когда приложение показывает чат на экране, оно устанавливает сокетное соединение с внутренним сервером. Сервер обрабатывает соединения и определяет способ доставки сообщений (сокет или FCM push-уведомление в зависимости от статуса приложения получателя)
  5. .
  6. или лучший вариант?
Вернуться на верх