DbHelp.ru
Маленький Yii блог
Комментарии
Гость: фотографии половова акта Рґ...
Гость: Добрый день товарищи! Минеральные удобрения– вещест...
Гость: http://subcutaneous.co/c9e8.html http://subcutaneous.co/82gl.html http://subcutaneous.co/4e6.html ...
Гость: Эта идея устарела ------... [url=https://twitter.com/madsoklj/status/8827207...
Гость: Дипломы ведущих ВУЗов РФ недорого и срочно: Крат...



Сервер Ultima Online - Forest Wars (от создателя данного блога)

Хитрый счетчик "онлайна на сайте"

Рубрика: Мелкие заметки на тему Yii

Оцените эту статью:

Рейтинг: 0.00 (0)
9 Фев. 2010
Опубликовать в Twitter Написать в Facebook Опубликовать в своем блоге livejournal.com

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

---

Данный способ не претендует на Нобелевскую премию, а лишь показывает еще один из способов реализации счетчика «живого онлайна». На моем блоге уже достаточно давно живет счетчик статистики от hit.ua (не реклама). Он достаточно удобен, в живом времени показывает кол-во людей на сайте, да и статистика там не плохая (ядро сайта, активные и тп).

Я подумал, раз этот сервис сам по себе получает кол-во моих посетителей на данный момент — то было бы удобно просто подрубится к нему и транслировать эту цифру у себя на странице. Я перешел на страницу своей статистики (открытая страница) http://hit.ua/site_view/13276 и начал анализировать код. Соглашусь с вами, весьма наглый подход :

ВАЖНО!! Цифры 13276 — это id моего блога в системе hit.ua; для вашего сайта — этот номер будет другим. После регистрации в hit.ua вы сможете увидеть этот номер посмотрев на url страницы на которой находитесь.

Включив фаербаг я понял что hit.ua для поддержания актуальных данных на этой странице — каждую секунду посылает GET запрос на страницу http://hit.ua/stat?i=13276 и получает в ответ:

>> 223,211,21,14

Если на странице статистики 4 динамических поля (хосты, посетители, хиты, онлайн на сайте), то не тяжело догадаться что означают эти цифры и в каком порядке они идут. Обнаружив страницу http://hit.ua/stat?i=13276 я в два раза облегчил себе жизнь: во-первых мне не придется парсить главную страницу статистики и откидывать оттуда лишний код; во-вторых эта страничка очень мало весит и не жрет много трафика.

Пишем простой парсер:

// открываем страницу статистики
$handle = fopen("http://hit.ua/stat?i=27441", "rb");
// получаем все данные
$contents = stream_get_contents($handle);
// удаляем из памяти ссылку на файл
fclose($handle);
// разбиваем полученые данные на ячейки (запятая - разделитель)
$arr =  explode(",", $contents);
// переменная онлайна
$online = (!empty($arr)) ? $arr[3] : 0;

Ну вот и все. Теперь переменную $online передаем в отображение и вуаля — на странице получаем кол-во онлайна.

Каждую перезагрузку страницы — будут браться новые данные с hit.ua и транслироваться на ваш сайт. Если хотите что бы данные динамически обновлялись каждые N секунд – используйте для этого javascript/jquery.

ВАЖНО!! Если сайт hit.ua перестанет работать - статистика онлайна на вашем сайте перестанет отображаться. Сам я лично еще не замечал что б этот сайт перестал работать, но на всякий случай предупреждаю.

п.с. Если не получится с динамическим обновлением без перезагрузки страницы — пишите в комментариях, покажу как.



Если хотите опубликовать этот материал у себя - пожалуйста, разместите ссылку на страницу откуда вы его взяли.
Другие yii статьи:

  1. Хочу вас обрадовать выходном новой версии замечательного Yii фреймворка. Данный релиз был немного задержан посравнению с обычным графиком, но ... "Yii Framework 1.0.5"

  2. Один хороший человек Sam Dark (rmcreative.ru)  опубликовал интересное сравнение двух отличных фреймворков. В правом углу - наш любимый Yii ... "Yii vs CodeIgniter"

  3. Эта статья устарела т.к. была написана для yii версии 1.0.х; Если вы используете более новую версию - у вас могут ... "Урок 6 : Регистрация и авторизация. Часть 1"

[guest] Гость

Было сказано: Вторник, 09 Февраль 2010

"4 денамических поля"

[adm] zolter

Было сказано: Вторник, 09 Февраль 2010

Сенк

[guest] mihdan

Было сказано: Вторник, 09 Февраль 2010

Позволил себе запостить вашу статью в мой блог с указанием источника. Надеюсь вы не против.

http://kobzarev.com/programming/creating-a-counter-online-in-site.html

[adm] zolter

Было сказано: Вторник, 09 Февраль 2010

Конечно :)

[adm] zolter

Было сказано: Среда, 10 Февраль 2010

Вот пример сайта на котором успешно работает данный подход - pijama.ru

[guest] Гость

Было сказано: Четверг, 18 Февраль 2010

Интересно, что покажет бенчмарк этой части кода. Установление соединения с удаленным хостом занимает немало времени.
Зашел на ваш сайт посмотреть новости по фреймворку, пока на php не пишу, интереса ради попробую ваш способ как будет возможность.:)

[guest] Гость

Было сказано: Четверг, 18 Февраль 2010

Я бы не выводил статистику онлайн при генерации страницы, а выводил её с помощью AJAX запроса после генерации страницы у пользователя. (+ тут же как вы и написали можно сделать обновление). Таким образом пользователь будет получать основной контент максимально быстро, и тогда уже можно себе позволить такую хитрость, как установление соединения с удаленным хостом, через ваш скрипт или напрямую :)

Ваша идея интересна, быстро реализуется, спасибо что поделились :)

[guest] Гость

Было сказано: Четверг, 18 Февраль 2010

Прошу прощения, поправлю себя, напрямую стандартным XMLHTTPRequest ведь сделать запрос к стороннему домену нельзя, только через скрипт-прокси на текущем домене :)

[guest] zolter

Было сказано: Четверг, 18 Февраль 2010

Угу :)

[guest] Не специалист

Было сказано: Среда, 01 Декабрь 2010

я не специалист :( - как "Теперь переменную $online передаем..." ? - вы не могли бы привести пример самодостаточного кода для "не специалиста" - что-куда методом копипейст :) ?

[guest] zolter

Было сказано: Среда, 01 Декабрь 2010

Если вы хотите делать вывод онлайна на всех страницах сайта - тогда просто прямо в лаяуте можете написать этот код, и в конце добавить:

echo $online;

[guest] Гость

Было сказано: Суббота, 09 Январь 2016

Как сделать что бы обновлялась статистика?

[guest] Гость

Было сказано: Суббота, 13 Май 2017

Ecли ты такой умный, то почему мало зарабатываешь? Грамотныe и эффeктивные тренеры огpaничивают сeбя небoльшими залами, coкpaщая доход от каждого выступления.
Снять вcе бaрьеpы к своей аудитории и оpганизовать качественную oнлайн-транcляцию помогает командa Теlemost.prо. Мы не знаем oграничений и УМЕEМ ВСЁ: создаём виpтуальную студию, oбеcпечивaем индивидуальный доступ к транcляции по электронным билeтам, рaбoтаeм только с професcиональным oбоpудовaниeм (дублируя ключeвые элементы при cъёмкe VIР-пeрсон). Мультиканальная видеосъёмка дeйствительно создаёт эффект пpисутcтвия – прoвеpeнo годами рaботы.
<a href=http://www.telemost.pro/>фонбет трансляции онлайн</a>

Оставить комментарий


Код:
Имя: