При создании веб-сайта для онлайн-общения возникла головная боль, связанная со статистикой онлайн-пользователей в реальном времени. Заказчик требует: подсчет текущего количества людей в сети, количества посетителей, количества участников. и список онлайн-пользователей, включая посетителей, участников и членов управления (если это посетитель, идентификатор посетителя генерируется автоматически, если он является участником, отображается имя участника). Поскольку для этого требуется производительность в реальном времени, сначала я расскажу об идее использования global.asa для ее решения.
Ключ к проблеме заключается в том, как определить, что пользователь ушел, и как выполнить файл или функцию, когда пользователь уходит.
Обсудив это с друзьями в Интернете, я наконец решил эту проблему.
Принцип решения такой: написать универсальную страницу. Так называемая универсальная страница означает, что каждая страница приложения содержит эту страницу, например: header.asp. На этой странице напишите фрагмент кода с использованием XMLHTTP. код - Запрос отправляется на сервер каждые 10 секунд или 20 секунд с целью обновления онлайн-времени текущего пользователя и удаления пользователей, чье онлайн-время превышает определенное время, чтобы записи онлайн-пользователей в базе данных сохраняли определенное реальное время. -временная природа.
Основной метод реализации:
создать новую базу данных, имена полей: id (символ), name (символ), пользователь (номер), tt (дата), admin (код авторизации, 0-обычный пользователь, 1-администратор)
таблица. имя: онлайн
header.asp ↓
========================================= === ================
<%
... ...
if session("s_in")<>1 и session("s_name")="" then 'If пользователь - Войдите один раз в
rs.open "выберите * из онлайн", conn,3,3
rs.addnew
rs("id")=session.sessionID
rs("name")="Гость" и session.sessionID
rs("user")=0 '0 означает, что пользователь не вошел в систему и является посетителем.
rs("тт")=сейчас
RS.обновление
RS.закрыть
session("s_in")=1 'Установить, что информация о пользователе сохранена в базе данных, что указывает на то, что он находится в сети.
end if
if session("s_name")<>"" then 'Если пользователь вошел в систему через окно входа
rs.open "выберите * из Интернета, где id='" & session.sessionID & "'",conn,3,3
rs("имя")=сессия("s_name")
rs("admin")=session("s_admin") 'Обновить имя пользователя на имя участника
rs("user")=1 'Указывает, что пользователь вошел в систему и является участником
rs("tt")=now 'Устанавливаем текущее системное время на время входа пользователя в систему
RS.обновление
RS.закрыть
end if
... ...
%>
... ...
<head>
... ...
<script Language=Javascript>
функцияTest()
{
вар xmlhttp = новый ActiveXObject("MSXML2.XMLHTTP");
xmlhttp.open("POST","onceonline.asp",false //Отправляем запрос на обновление в Onceonline.asp);
xmlhttp.setRequestHeader("CONTENT-TYPE","application/x-www-form-urlencoded");
xmlhttp.send();
}
setInterval("Test();",10); //Отправляем запрос на обновление каждые 10 секунд;
</script>
... ...
</head>
... ...
============================= ===========================
Onceonline.asp
<%
rs.open "выберите tt из сети, где id='" & session.sessionID & "'",conn,3,3
rs("tt")=now() 'Обновляем время онлайн текущего онлайн-пользователя
RS.обновление
rs.close
rs.open "удалить из сети, где dateiff('s',tt,now())>60",conn,3,1 'Удалить пользователя с таймаутом
%>
============================================= ==============
Таким образом, в основном гарантируется режим реального времени списка пользователей в базе данных. Ошибка зависит от разницы между временем обновления и временем удаления, а также временем удаления. скорость обработки сервера. Рекомендуется не ограничивать время удаления. Если временной интервал между пользователями слишком мал, это может привести к ошибкам среди онлайн-пользователей.
Это решение было отлажено на WIN2000+SQL Server2000. Поскольку это решение имеет относительно высокие системные требования, я надеюсь, что другие друзья найдут лучшие решения и решат эту проблему вместе!
Мой почтовый ящик: [email protected]
Меня зовут «Строительные Блоки», добро пожаловать в друзья со мной!