[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Функция "кто онлайн" ?
Гость_Дмитрий
Каким образом правильно реализовать данную функцию, т.е. что бы сайт следил за тем, кто онлайн, при этом что бы на сервер нагрузка была минимальной.



Спустя 3 минуты, 31 секунда (16.02.2011 - 21:53) Гость_Дмитрий написал(а):
Ну к примеру, моя мысль. Каждые 5 секунд посылать на сервер запрос, который будет сохранять дату (время) записи в базу данного запроса. А потом сделать CRON который каждую секунду будет запускатся и проверять скрипт в котором: "Если разница между данным временем и временем которое записано у пользователя в базе боль 10-ти секунд, значит сделать его STATUS=0, не в сети".

Но в этом случае, хех, нагрузка будет большая..

Спустя 8 минут, 51 секунда (16.02.2011 - 22:02) Renden написал(а):
Гость_Дмитрий
А зачем тебе крон и тп, если у пользователя есть учетка (логин пароль) то когда он заходит на сайт делает логин, в базу писать значение status=1.

ну и собственно если пользователь логаут(можно установить например время сесии) писать в базу status=0

Спустя 7 минут, 41 секунда (16.02.2011 - 22:09) Invis1ble написал(а):
Renden
Цитата
если пользователь логаут(можно установить например время сесии) писать в базу status=0

а если нет? если просто закрыл вкладку в браузере? =)

Гость_Дмитрий
в точке входа (index.php, например) записывать время последней активности юзера в базу. А потом проверять - если (время последней активности + таймаут (скажем, 10 минут)) < текущее время, значит юзер оффлайн

Спустя 18 часов, 39 минут, 30 секунд (17.02.2011 - 16:49) Гость_Дмитрий написал(а):
Invis1ble
Цитата
а если нет? если просто закрыл вкладку в браузере? =)


- Полностью согласен.

Цитата
в точке входа (index.php, например) записывать время последней активности юзера в базу. А потом проверять - если (время последней активности + таймаут (скажем, 10 минут)) < текущее время, значит юзер оффлайн


Давайте не много разьясним положение.

Есть база данных, в ней 25000 людей. Когда какой то человек делает какие то действие, дата этого действия записывается в базу.
- Заходит второй пользователь. Запрос в базы: "Выбрать всех тех, у которых разница между текущем временем, и временем записаным в базу > 30 секунд.". Ну и при этом, допустим, выведет 1000 человек онлайн. Хорошо. Сильная ли это нагрузка на базу, делать таки SELECT`ы ?

Спустя 2 часа, 29 минут, 36 секунд (17.02.2011 - 19:18) Invis1ble написал(а):
Гость_Дмитрий
Цитата
Сильная ли это нагрузка на базу, делать таки SELECT`ы ?

думаю при правильном проектировании БД - нет.
Как минимум, для поля "время последней активности" должен быть соответствуюющий индекс, ну и движок таблицы подобрать соответственно - тогда все будет норм.

Спустя 17 минут, 8 секунд (17.02.2011 - 19:35) inpost написал(а):
В БД заносится при переходе страницы (или аяксом с интервалом) дата, когда последнее действие было. А вычисляется: если последнее действие было за последние минут 10-15.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.