#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 секунды против только тогда, когда пользователь отключается».
Кроме того (не то, о чем вы просили), если вы будете настраивать собственный сервер сокетов, это также поможет в следующих сценариях:
- События ввода (указание, которое мы получаем, когда другой человек вводит сообщение)
- Более быстрый способ узнать, подключен ли человек на другом конце к сети / офлайну (из-за сокетов)