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

У меня есть чат на сайте для двух человек (нас и любые клиенты, задающие вопросы), и я хочу отображать сообщение «$client отключился», когда они отключаются каким-либо образом, в том числе:

  • Нажатие назад в браузере
  • Закрытие окна
  • Закрытие браузера через диспетчер задач

Мне еще предстоит найти надежный способ (попытка с помощью свойств JavaScript onunload и onbeforeunload) справиться с этим, особенно если использовался диспетчер задач.

Я думаю сделать так, чтобы пользователь продолжал вызывать AJAX-скрипт, где они увеличивают некоторое значение на стороне сервера; это увеличение прекратится, когда их страница будет закрыта. С нашей стороны продолжайте запускать скрипт, который проверяет, изменилось ли это значение. Если он не изменился после произвольного количества проверок (например, 3), то пользователь, вероятно, отключился, и он отобразит сообщение.

Но в этом нет никакой элегантности, и вывод «вероятно, отключен» не совсем обнадеживает.

Как бы вы это сделали, чтобы сообщение об отключении появлялось только тогда, когда пользователь отключился.


person Voriki    schedule 03.03.2012    source источник
comment
$.ajax({ success:function(){ // setTimeout(function(){ window.location.reload(); }, 2000) } }); используйте этот jquery, он обновляется с интервалом в 2000 миллисекунд   -  person Sam Arul Raj T    schedule 03.03.2012


Ответы (1)


на самом деле, вы не можете реализовать это на HTML/JS/CSS, где, как только пользователь уходит, он отключается - ну... неэффективно.

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

Существует то, что они называют кометой, что означает методы "постоянного соединения". " - один из которых является опросным. также в статье приведены методы «посредника», когда вы можете использовать плагины, такие как flash, и их возможности потоковой передачи.

person Joseph    schedule 03.03.2012