2013-04-26 3 views
1

Прежде всего, я прошу прощения, если раньше был аналогичный вопрос, я честно не мог найти.Возможная ошибка Firebase с .onDisconnect() при запуске Opera?

Я в настоящее время разрабатываю чат с помощью Firebase и благодаря приличным документам я готовлю хороший прогресс до сих пор, так что это на самом деле не проблема. Однако во время тестирования я наткнулся на небольшую проблему, которая может быть ошибкой.

Для управления присутствием в моем чате, я толкая значения в место, которое соответствует моему уникальному идентификатору пользователя. Это нажатое значение затем удаляется при отключении. Таким образом, я могу надежно определить статус пользователя, не беспокоясь о его количестве одновременных подключений к моим Firebase (например, вкладкам браузера).

Это действительно отлично работает с Firefox, Chrome и Safari, но, похоже, проблема с Opera. При использовании Opera, если закрыть вкладку, в которой чат работает, то значение, которое должно быть удалены при разъединении является не. Он будет удален в конце концов примерно через 2 минуты или около того, но он слишком длинный, учитывая, что одно и то же происходит мгновенно при использовании другого браузера.

Из любопытства я попытался presence example с помощью Opera, и я был в состоянии воспроизвести точно такое же поведение. Если я открою соответствующую Firebase на другой вкладке, запустите пример, введите имя и, наконец, закройте вкладку, в которой работает этот пример, я вижу, что значение в соответствующей Firebase не удаляется при закрытии вкладки.

Я был бы признателен, если вы могли бы сказать мне, если это только я делаю что-то неправильно, или если это на самом деле ошибка.

С уважением Мадди

+0

Вы не упомянули о версиях, что было бы важно. Тем не менее, onDisconnect запускается на серверах Firebase (не локально), поэтому он не зависит от браузера. Я предполагаю, что по какой-то причине вы не используете веб-порты, а серверу приходится ждать подключения TCP? Вы пробовали ждать 5-10 м и видели, если отключается пожар? – Kato

ответ

3

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

В результате мы не можем точно знать, когда кто-то покинул страницу в Opera. В результате мы вынуждены просто ждать таймаута сервера, чтобы определить, что кто-то ушел.

Итак, короткий ответ, операции OnDisconnect DO работает в Опере, но они могут занять несколько минут, чтобы повлиять. Во всех других браузерах операции будут выполняться немедленно, если соединение будет прекращено, и через несколько минут, если это не так.

+1

Ну ладно, я не знал об этом, спасибо, что прояснил это. Ну, в любом случае, это не так уж и много. Я бы счел это неудобством в лучшем случае, мне было просто интересно, почему это происходит. – Muddy

Смежные вопросы