Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

session_online_ids: подсчитывает кол-во посетителей, присутствующих сейчас на сайте (Rin)
Author Message
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 184
   поощрить/наказать

Location: Москва

PostPosted: Tue Nov 06, 2007 1:50 pm (написано за 5 минут 30 секунд)
   Post subject: session_online_ids: подсчитывает кол-во посетителей, присутствующих сейчас на сайте
Reply with quote

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

Внутри архива есть функция is_browser()
Возвращает TRUE, если клиент является браузером и FALSE в противном случае (клиент явл. роботом).
Определение браузера происходит по заголовку запроса HTTP_USER_AGENT согласно спецификации.

Посмотреть работающий пример можно здесь (avtorif.ru/), в самом низу.


session_online_ids-2.2.0.rar
 Description:

Download
 Filename:  session_online_ids-2.2.0.rar
 Filesize:  3.54 KB
 Downloaded:  949 Time(s)



Last edited by Rin on Fri Sep 26, 2008 11:48 am; edited 7 times in total
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Tue Nov 06, 2007 10:32 pm (спустя 8 часов 42 минуты; написано за 47 секунд)
   Post subject:
Reply with quote

На всякий случай скажу, что сам скрипт -- это лишь около 60 строк кода, а остальное -- комментарии и лицензия :).
Back to top
View user's profile Send private message Send e-mail
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 184
   поощрить/наказать

Location: Москва

PostPosted: Tue Nov 06, 2007 11:14 pm (спустя 42 минуты; написано за 4 минуты 4 секунды)
   Post subject:
Reply with quote

Комментарии вносят ясность, а лицензия никак не ограничивает скрипт в использовании :)

P.S.
Надеюсь, что скрипт пригодится разработчикам проекта МойКруг -- давно хочется увидеть функциональность в виде посетителей, присутствующих сейчас на сайте.
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Wed Nov 07, 2007 4:11 am (спустя 4 часа 56 минут; написано за 42 секунды)
   Post subject:
Reply with quote

Rin
Для проекта типа МойКруг я бы использовал просто базу данных для хранения сессии, и заодно там бесплатно реализуется функциональность Вашего скрипта :).
Back to top
View user's profile Send private message Send e-mail
Валенок
Участник форума



Joined: 06 Apr 2006
Posts: 520
Карма: -3
   поощрить/наказать


PostPosted: Wed Nov 07, 2007 6:06 pm (спустя 13 часов 55 минут; написано за 1 минуту 2 секунды)
   Post subject:
Reply with quote

Rin :))) интересная идея: хочу фишку в проект - намекну, выложу свое решение на форум, где тусуют разработчики (среди прочих)
Back to top
View user's profile Send private message
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 184
   поощрить/наказать

Location: Москва

PostPosted: Wed Nov 07, 2007 6:45 pm (спустя 38 минут; написано за 2 минуты 43 секунды)
   Post subject:
Reply with quote

Юрий Насретдинов

И что, при каждом посещении пользователя обновлять и делать выборку из таблицы БД?
С файлом гораздо быстрее должно быть.
Back to top
View user's profile Send private message Send e-mail
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 184
   поощрить/наказать

Location: Москва

PostPosted: Thu Nov 08, 2007 10:20 am (спустя 15 часов 35 минут; написано за 41 секунду)
   Post subject:
Reply with quote

2.1.1
  1. Считает только тех клиентов, которые прислали обратно идентификатор сессии.
    Это позволяет исключить "случайно" зашедших на сайт браузеров и роботов
    и более точно подсчитывать количество "активных" клиентов.
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Thu Nov 08, 2007 3:16 pm (спустя 4 часа 55 минут; написано за 3 минуты 54 секунды)
   Post subject:
Reply with quote

Rin
В зависимости от объёма. Для больших объёмов мне кажется, что база будет намного шустрее. Ведь Вы целиком обновляете файл при каждом заходе... Эффективность такой системы, скажем, 1/(N^2), где N - количество посетителей в данный момент. Обоснование простое: N раз в какой-то интервал времени будет обращение к сайту, и время для записи в файл пропорционально N. А для базы данных, я думаю, что-нибудь вроде 1/N*log N (если операции чтения превалируют над записью), или те же 1/(N^2) для сравнимого отношения чтения и записи.
Back to top
View user's profile Send private message Send e-mail
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 184
   поощрить/наказать

Location: Москва

PostPosted: Thu Nov 08, 2007 6:07 pm (спустя 2 часа 51 минуту; написано за 4 секунды)
   Post subject:
Reply with quote

Юрий Насретдинов
Не понятен Ваш метод подсчета эффективности. Давайте считать в запросах в секунду.
Добровольная блокировка файла является узким местом этого скрипта, при которой все остальные точно такие же скрипты будут ждать освобождения блокировки. Если предположить, что время работы этого скрипта около 0.01 сек, то за секунду скрипт может выполнится 100 раз, что является отличным результатом.
На БД предположительно должно уйти где-то 0.05-0.08 секунды (подключение + REPLACE + SELECT), что в 5 раз медленнее...
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Thu Nov 08, 2007 11:36 pm (спустя 5 часов 28 минут; написано за 6 минут 21 секунду)
   Post subject:
Reply with quote

Rin
Я полагаю, подключение к базе уже будет существовать :), поэтому время на его установление равно нулю.


Ну а запросы примерно такие:
Code (SQL): скопировать код в буфер обмена
--

DELETE FROM `session` WHERE `time` < (UNIX_TIMESTAMP()-5*60) --
INSERT INTO `session` SET `sess_id`=?, `time`=UNIX_TIMESTAMP()
UPDATE `session` SET `time`=UNIX_TIMESTAMP() WHERE `sess_id`=?
SELECT COUNT(*) FROM `session` WHERE `time`>(UNIX_TIMESTAMP-5*60)
UPDATE `session_max` SET `MAX`=MAX(`MAX`, ?)
Правда, тут получается, что операции записи и чтения будут в одинаковом количестве, и к сожалению, преимуществ от базы данных, вроде как, нету.
Rin wrote:
Если предположить, что время работы этого скрипта около 0.01 сек
Попробуйте просто провести эксперимент и сравнить :). Скажем, для количества различных сессий порядка 1000.
У меня для подключения к базе+выполнения нескольких достаточно сложных запросов чтения и записи (я делал счётчик числа посещений на сайте) уходило как раз те самые 0.01 секунды.
Back to top
View user's profile Send private message Send e-mail
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 184
   поощрить/наказать

Location: Москва

PostPosted: Fri Nov 09, 2007 12:29 pm (спустя 12 часов 53 минуты; написано за 2 минуты 31 секунду)
   Post subject:
Reply with quote

Юрий Насретдинов wrote:
Я полагаю, подключение к базе уже будет существовать :)
Почему Вы так думаете?
Сколько у Вас занимает время подключения к БД?

Первый запрос можно поместить в крон и запускать один раз в час.
Второй и третий можно переписать одним: REPLACE INTO `session` SET `sess_id`=?, `time`=UNIX_TIMESTAMP()

Эксперимент не так-то просто провести, к сожалению.
Думаю, что это будет на рабочем сайте.
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Fri Nov 09, 2007 2:01 pm (спустя 1 час 32 минуты; написано за 2 минуты 3 секунды)
   Post subject:
Reply with quote

Rin wrote:
> Я полагаю, подключение к базе уже будет существовать :)
Почему Вы так думаете?
Сколько у Вас занимает время подключения к БД?
Ну... Потому что сервис типа МойКруг совершенно точно будет использовать базу данных для чего-то ещё :). Я не верю, что там всё на файлах сделано.

Сколько времени занимает подключение к БД? Ну, вот, например, вся страница сайта dolphin-php.org/ (мой файловый менеджер) генерируется за 0.01 сек, при этом 0.0062 занимает MySQL. За это время она успевает подключиться и выполнить 4 запроса (правда, только на чтение). Ну а соединение с базой это примерно половина от этого времени, или меньше.
Back to top
View user's profile Send private message Send e-mail
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 184
   поощрить/наказать

Location: Москва

PostPosted: Fri Nov 09, 2007 4:34 pm (спустя 2 часа 33 минуты; написано за 2 минуты 31 секунду)
   Post subject:
Reply with quote

МойКруг без БД точно не обходится :)

Идея сделать подсчет количества посетителей он-лайн через БД была первой.
Но я решил сделать через файл вот почему.
Как показывает мой опыт, БД, в силу разных причин, может работать не стабильно.
В моем проекте есть и БД и кэширование html-страниц в файловую систему.
Если БД "падает", то программа пытается достать данные из из кэша (даже если данные устарели).
Если данных в кэше нет, то "сваливается" с фатальной ошибкой.
В независимости от работоспособности БД количество посетителей он-лайн продолжает считаться...

Думаю, что оба способа хороши.
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Fri Nov 09, 2007 6:08 pm (спустя 1 час 33 минуты; написано за 11 секунд)
   Post subject:
Reply with quote

Rin
Ну хз, по идее база не должна падать, если следить за её состоянием :).
Back to top
View user's profile Send private message Send e-mail
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 184
   поощрить/наказать

Location: Москва

PostPosted: Fri Apr 25, 2008 12:53 pm (спустя 5 месяцев 15 дней 18 часов 44 минуты; написано за 2 минуты 30 секунд)
   Post subject:
Reply with quote

2.2.0
  1. Для более точного подсчета посетителей он-лайн добавлена проверка клиента -- браузер он или робот (роботы портят статистику, поэтому в расчет не берутся).
Back to top
View user's profile Send private message Send e-mail
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 184
   поощрить/наказать

Location: Москва

PostPosted: Fri May 16, 2008 9:05 pm (спустя 21 день 8 часов 11 минут; написано за 32 секунды)
   Post subject:
Reply with quote

Исправлена ошибка в is_browser(), рекомендуется обновиться.
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML