Утюг-чат

Скорость

Уведомление пришло, а сообщения в чате нет?

Телефон с карточкой уведомления над экраном и пузырь чата, летящий в открытый чат ей навстречу

Если уведомление показывает новое сообщение, а в чате его ещё нет, сообщение не потерялось. Уведомление и чат едут к тебе разными дорогами, и дорога чата была медленнее. В Утюг-чате (Iron Messenger) после касания уведомления эта пауза могла длиться около трёх секунд. Мы нашли причину в собственных логах и убрали её: открытый чат теперь сразу спрашивает о новых сообщениях, а приложение, вернувшееся после короткого перерыва, получает только пропущенное и не скачивает всё заново.

Почему уведомление приходит раньше сообщения?

Пока Утюг-чат открыт на экране, он держит одно живое соединение с нашим сервером. Сервер отправляет туда каждое новое сообщение в ту же секунду, когда сохраняет его, так что открытый чат обновляется сам. Никто не спрашивает «есть что новое?» по таймеру.

Когда ты переключаешься на другое приложение, Утюг-чат закрывает это соединение. Соединение, открытое в фоне, не даёт радиомодулю уснуть и съедает батарею, да и Android такие приложения не жалует. Дальше наш сервер достучится до тебя через пуш-сервис телефона: Firebase Cloud Messaging от Google на большинстве Android-телефонов или Huawei Push Kit на телефонах Huawei без сервисов Google. Пуш-сервис показывает уведомление, даже когда Утюг-чат вообще не запущен.

Выходит, уведомление — быстрая дорога. Чат — медленная: когда ты касаешься уведомления, приложение просыпается, подключается заново и спрашивает, что нового. Какая-то пауза между ними есть в любом мессенджере. Вопрос только в том, насколько она длинная.

Что мы нашли, когда это случилось у нас?

24 октября кто-то из нас заметил это в собственной рабочей группе. Пришло уведомление, касание открыло группу, а нового сообщения там не было. Оно появилось секунды через три. Это недолго, но достаточно, чтобы подумать, что приложение потеряло сообщение.

Логи сервера рассказали всё с точностью до секунды. Сначала сообщение сохранилось, и только потом ушло уведомление. Когда телефон вернулся, все его запросы пришли в пределах одной секунды, и на каждый сервер ответил меньше чем за секунду. Сервер не тормозил. Телефон ждал, прежде чем спросить.

Ждал он потому, что открытый чат полагался на живое соединение: мол, оно всё и догонит. Приложению нужно было разбудить радиомодуль, найти наш сервер, установить шифрованное соединение, подтвердить, кто ты, подписаться на твои события, и только после этого оно спрашивало о новых сообщениях. На только что разбуженном телефоне эти шаги занимали около трёх секунд, и всё это время чат показывал старую страницу. Хуже всего было с уведомлением из того самого чата, который был открыт, когда ты уходил: приложение видело, что ты уже в нём, и даже не обновляло экран.

По дороге нашлась ещё одна проблема. Наш сервер ненадолго хранит твои последние события как раз затем, чтобы вернувшееся приложение догоняло их дёшево. Но приложение каждый раз в фоне забывало, на каком событии остановилось, так что любое возвращение заново скачивало весь список чатов.

Коснулся уведомления — видишь сообщение. Без трёх секунд гипнотизирования старого чата.

Скачать Утюг-чат Попробовать в браузере

Что изменилось в Утюг-чате?

  • Открытый чат спрашивает о новых сообщениях, как только ты возвращаешься. Он больше не ждёт живого соединения: одно и другое происходит одновременно. После касания уведомления сообщение появляется, как только ответит один короткий запрос. Открытый чат ещё и отмечается прочитанным, так что галочки у автора тоже меняются в тот же момент (про галочки — в тексте кто прочитал твоё сообщение в группе).
  • В фоне приложение помнит, где остановилось. Для каждого человека наш сервер держит события за последние 15 минут, до 50 штук, и только в оперативной памяти. Если ты возвращаешься в пределах этого времени, приложение говорит, где остановилось, и получает только пропущенное: новые сообщения, правки, реакции и галочки прочтения.
  • Старое «печатает…» больше не воскресает. Сигналы набора текста в этой истории не хранятся, а приложение игнорирует устаревшие, так что после возвращения ты не увидишь, что кто-то «печатает», хотя он замолчал пару минут назад.
  • Страховка для плохой сети. Если живое соединение не поднялось за четыре секунды после возвращения (слабый Wi-Fi, страница входа в сеть кафе), приложение обновляет экран по-старому. А если пропущенные события приходят уже после этого, оно обновляет экран ещё раз, чтобы счётчик непрочитанных не посчитал одно сообщение дважды.

Не съедает ли это батарею или мобильный интернет?

Наоборот, теперь выходит дешевле. До сих пор каждое возвращение в приложение заново скачивало список чатов, а заодно и открытый чат. Список чатов — самое большое, что приложение скачивает регулярно, потому что в нём по строке на каждый твой чат.

Теперь возвращение в пределах 15 минут скачивает только открытый чат и короткий список пропущенных событий. Если ты возвращаешься к списку чатов, а не в чат, — только эти события. Закрытое приложение, как и раньше, не держит с нами никакого соединения: уведомления доставляет пуш-сервис телефона. Если телефон старенький или интернет медленный, загляни в текст про мессенджер для старых телефонов и слабого интернета.

Мессенджер, который сам догоняет пропущенное. Бесплатно и без номера телефона.

Скачать Утюг-чат Попробовать в браузере

Когда я получу исправление?

  • Android и Windows: с обновлением после версии 3.9.0. Если у тебя версия 3.9.0 или более ранняя, пауза ещё есть. Сообщение не теряется: подожди секунду, и оно появится.
  • Веб-версия на m.ironmess.app: с её следующей публикацией. После неё просто обнови страницу.
  • Утюг-лайт, приложение для слабых телефонов, получил то же исправление, и оно выйдет в следующей сборке.
  • iPhone: приложения для iPhone нет, так что и обновлять нечего.

События, которые сервер держит для вернувшегося приложения, живут в его памяти 15 минут и нигде не записываются. Что и сколько хранит Утюг-чат, рассказываем в тексте о том, как устроена приватность в Утюг-чате. А какое приложение ставить на какое устройство, — в тексте Утюг-чат на Android, Windows и в браузере.

Частые вопросы

Почему Утюг-чат показывает уведомление раньше, чем сообщение появляется в чате?

Уведомление приходит через пуш-сервис телефона, а чат Утюг-чата обновляется через собственное соединение, которое восстанавливается, когда ты открываешь приложение. С обновлением после версии 3.9.0 открытый чат сразу спрашивает о новых сообщениях.

Теряется ли сообщение, если Утюг-чат показал уведомление, а чат пустой?

Нет. Утюг-чат сохраняет сообщение на сервере ещё до того, как отправляет уведомление, так что оно уже там. Чат покажет его, как только приложение о нём спросит.

Держит ли Утюг-чат соединение открытым в фоне?

Нет. Утюг-чат закрывает живое соединение в фоне и полагается на пуш-уведомления, что бережёт батарею. Если вернуться в течение 15 минут, он получит только пропущенные события.

В какой версии Утюг-чата есть это исправление?

Утюг-чат для Android и Windows получил исправление с обновлением после версии 3.9.0, а веб-версия — со следующей публикацией. Утюг-лайт получит его в следующей сборке.

Хватит читать. Напиши кому-нибудь.

Бесплатно на Android, Windows и в браузере. Без номера телефона, без ленты, без рекламы.