Альтернативная реализация для последнего просмотра в приложении чата

#android #firebase #sockets #flutter #websocket

#Android #firebase #сокеты #флаттер #websocket

Вопрос:

Я опишу свой вариант использования с прилагаемыми рисунками и все, что я могу сделать, чтобы было понятно, чтобы у нас могла появиться идея получше…

Общая идея:

  • Приложение для чата WhatsApp с firebase Пример использования: Как мы знаем, одна из функций WhatsApp — это последний просмотр, когда пользователь это сделал (вышел из приложения, вышел из системы, потерял соединение Wi-Fi и т.д.) Я пытался использовать:

  • onDisconnect, но onDisconnect выдает плохой результат при потере соединения wifi (из-за задержки сокета, время ожидания которого истекло)

  • тот, который я использую сейчас, заключается в том, что каждый пользователь обновляет свою временную метку каждые 3 секунды (обновлять документ каждые 3 секунды), когда пользователь теряет соединение, он не сможет обновить свою временную метку, верно? Итак, если другой пользователь хочет пообщаться с этим автономным пользователем, я могу показать ему, что пользователя видели в последний раз. Надеюсь, это понятно…

  • Разработано с использованием фреймворка Flutter

  • Переопределение для управления состоянием приложения

  • Firebase, облачный firestore

Приведенный ниже код отправляет действие каждые три секунды, это отправленное действие обновит последнее просмотренное в firebase…

 timer = Timer.periodic(Duration(seconds: 3), (Timer t) {
   // store.dispatch(updateUserOnline());
});
  

Как вы можете видеть на рисунке ниже, моя структура данных о том, как я обновляю «последний просмотр» для этого пользователя каждые 3 секунды…

Эта реализация очень дорогая, чтобы получить удовлетворительные результаты для последнего просмотра для пользователя, если у нас миллион пользователей, и эти миллионы пользователей обновляют свой последний просмотр каждые 3 секунды, это будет стоить много долларов в месяц, поскольку мы выполняем операцию записи, нет?

Итак, мое другое решение — реализовать подключение сокета к моему собственному серверу и позволить всем пользователям прослушивать событие onDisconnect socket на моем сервере вместо Firebase server, выполнимо ли это, чтобы избежать огромных затрат на операции записи?

изображение прикреплено: здесь

Ответ №1:

Запись в Firebase действительно была бы немного дороже, поскольку вы отправляли бы много записей, которые, по-видимому, предназначены только для задания «последнего просмотра».

Вместо этого, как вы упомянули, подключение сокета к вашему собственному серверу поможет уменьшить количество выполняемых вами запросов. т. е. Как только сокет отключается от сервера, вы можете отправить операцию записи в Firebase. «Каждые 3 секунды против только тогда, когда пользователь отключается».

Кроме того (не то, о чем вы просили), если вы будете настраивать собственный сервер сокетов, это также поможет в следующих сценариях:

  • События ввода (указание, которое мы получаем, когда другой человек вводит сообщение)
  • Более быстрый способ узнать, подключен ли человек на другом конце к сети / офлайну (из-за сокетов)