DbHelp.ru
Маленький Yii блог
Комментарии
Гость: wh0cd2594827 [url=http://pyridium911.us.com/]Pyridium[/url] [url=http://clozaril911.us.org/]clozaril...
Гость: order Retrovir in USA delivery NO PRESCRIPTION ; low prices Retrovir in Canada pharmacy without ...
Гость: wh0cd3078423 [url=http://sildenafil04.us.org/]sildenafil citrate generic[/url] [url=http://xenical02...
Гость: wh0cd2594827 [url=http://dapoxetine911.us.com/]dapoxetine[/url] [url=http://lisinopril03.us.com/]40 ...
Гость: buy essays essay buying order essay now https://buyessay.us.com - college essay helper



Сервер 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. Разработчики в очередной раз не перестают нас радовать новой версией замечательного фреймворка. Я был очень рад когда после выходных, выйдя ... "Версия 1.0.7"

  2. Я тут маленько проспал выход новой версии своего любимого фреймворка. И так, говорим здравствуй Yii 1.1.5! next Самое вкусное: CTypedMap. В профайлере теперь видно ... "Yii Framework 1.1.5"

  3. В процессе разработки приложения, очень часто требуется следить за запросами которые формирует фреймворк.В этом нам поможет FireBug, незаменимый инструмент ... "Логирование запросов в FireBug"

[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>

[guest] Гость

Было сказано: Суббота, 09 Сентябрь 2017

cialis 5 mg dopo quanto fa effetto

<a href="http://cialisxrm.com/">buy cialis online</a>

fake cialis images

<a href=http://cialisxrm.com/>buy generic cialis</a>

[guest] Гость

Было сказано: Среда, 20 Сентябрь 2017

pharmacy online store
<a href="http://canadianpharmacyrxbsl.com/">canadian pharmacies shipping to usa</a>
drugs online
[url=http://canadianpharmacyrxbsl.com/?dangers-of-stopping-metoprolol]dangers of stopping metoprolol[/url]
buy prescription drugs without doctor
<a href="http://canadianpharmacyrxbsl.com/?equipe-argentine-viagra">equipe argentine viagra</a>

[guest] Гость

Было сказано: Четверг, 21 Сентябрь 2017

no prescription online pharmacy
<a href="http://canadianpharmacyrxbsl.com/">northwest pharmacy</a>
the canadian pharmacy
<a href=http://canadianpharmacyrxbsl.com/?iv-lasix>iv lasix</a>
online pharmacy canada
<a href="http://canadianpharmacyrxbsl.com/?what-is-clonidine">what is clonidine</a>

[guest] Гость

Было сказано: Четверг, 21 Сентябрь 2017

overseas pharmacies
<a href="http://canadianpharmacyrxbsl.com/">canadian pharmacies shipping to usa</a>
best canadian mail order pharmacies
<a href=http://canadianpharmacyrxbsl.com/?what-infections-does-ciprofloxacin-treat>what infections does ciprofloxacin treat</a>
canadian discount pharmacy
<a href="http://canadianpharmacyrxbsl.com/?zoloft-overdose">zoloft overdose</a>

[guest] Гость

Было сказано: Пятница, 22 Сентябрь 2017

drug costs
<a href="http://canadianpharmacyrxbsl.com/">canadian online pharmacies</a>
cheap drugs online
<a href=http://canadianpharmacyrxbsl.com/?ciprofloxacin-hcl-500-mg>ciprofloxacin hcl 500 mg</a>
canada drug pharmacy
<a href="http://canadianpharmacyrxbsl.com/?when-will-cialis-go-generic">when will cialis go generic</a>

[guest] Гость

Было сказано: Пятница, 22 Сентябрь 2017

best price prescription drugs
<a href="http://canadianpharmacyrxbsl.com/">canadian pharmacy</a>
medication costs
<a href=http://canadianpharmacyrxbsl.com/?viagra-sex>viagra sex</a>
most reliable canadian pharmacies
<a href="http://canadianpharmacyrxbsl.com/?sildenafil-100mg-preisvergleich">sildenafil 100mg preisvergleich</a>

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


Код:
Имя: