2009-02-10 5 views
7

Фон: Я создаю очень простой сайт, похожий на чат-сайт ASP.NET, с C# Code-Behind. Текущие сообщения пользователей/чатов отображаются в элементах управления, расположенных в панели обновления AJAX, и с использованием таймера - они извлекают информацию из БД каждые несколько секунд.Запуск функции на стороне сервера в браузере закрывается

Я пытаюсь найти простой способ справиться с настройкой статуса пользователя на «Оффлайн» при выходе из браузера, а не нажатием кнопки «Выход». Статус «Offline» в настоящее время составляет всего 1 символ (y/n) для IsOnline.

До сих пор я смотрел в window.onbeforeunload с Javascript, устанавливая скрытую переменную формы с функцией на этом событии -> Конечно, проблема в том, что мне все равно придется проверять эту скрытую переменную формы в коде Code- Зачем-то делать окончательный запрос на серверную БД, эффективно отключая пользователя.

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

Благодаря

ответ

15

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

Лучший способ сделать это с помощью «переключателя мертвого человека». Поскольку вы сказали, что они извлекают информацию из базы данных каждые несколько секунд, используйте эту возможность для хранения (в базе данных) отметки времени в последний раз, когда вы слышали от данного клиента.

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

+0

Спасибо Джоэл, ваше предложение имеет большой смысл. У вас возникло бы предположение о том, что для запуска этого опроса On-Server для проверки/установки пользователей в автономном режиме было бы полезно начать работу - я никогда не делал ничего подобного, несмотря на то, насколько это просто. –

+0

, вероятно, стоит другого вопроса ... «как запускать периодические процессы на сервере asp.net» ... –

+0

Спасибо! Я напишу, что скоро это получится. Цените это. –

2

Javascript не может быть надежным, потому что я могу закрыть свой браузер, отменив его.

Более надежным методом может быть передача периодических сообщений «привет, я все еще жива» из браузера на сервер и изменение статуса сервера при прекращении приема этих сообщений.

2

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

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

  • Нет связанных вопросов^_^