26

Re: Icecast2 - почему вы дергаете статистику с помощью PHP?

пишет MechanisM:

пишет Klef:

а потом тупо дергать его с помощью javasctipt

FUUUUUUUUU~~~

chto-to ne nravitsya? ili ti hochesh chtobi tvoi server sam vse obrabatival? luchshe na storone clienta pust javascript dergaetsya i vse obrabativaet. a servachek otdihaet.

побуду слоупоком по времени ответа wink

сбрасывать нагрузку с сервера на пользователей это плохой тон.

так же кучей пользователей моно радостно устроить большое количество конектов лишних к icecast'у.
что можно спокойно обойти скриптами на сервере.
(первый запрос, хранение данных, следующие запросы уже к сохраненым данным, а по истечении срока давности уже повторный запрос к источнику)
либо вообще периодически опрашивать (в независимости от пользователей) информацию, сохранять ее в статику, и отдавать пользователю уже статику (тупо текст, или сразу же сгенерированную картинку)

и да, я не люблю js

-------------------------------
R244390603111<- пиво лить сюда

27

Re: Icecast2 - почему вы дергаете статистику с помощью PHP?

пишет Klef:

побуду слоупоком по времени ответа wink

сбрасывать нагрузку с сервера на пользователей это плохой тон.

так же кучей пользователей моно радостно устроить большое количество конектов лишних к icecast'у.
что можно спокойно обойти скриптами на сервере.
(первый запрос, хранение данных, следующие запросы уже к сохраненым данным, а по истечении срока давности уже повторный запрос к источнику)
либо вообще периодически опрашивать (в независимости от пользователей) информацию, сохранять ее в статику, и отдавать пользователю уже статику (тупо текст, или сразу же сгенерированную картинку)

и да, я не люблю js

именно так я и делал когда пользовался не измененным айскастом.
раз в 4 секунды дампил всю статистику одновременно обрабатывая ее в нужном мне виде. и потом просто дергал этот дамп не трогая айскаст через javascript клиентами.
но это и так логично и любой здравомыслящий программист именно так и сделает.
в данном случае речь шла о формате вывода для тех кто пользуется стандартными php скриптами которые дергают сервер каждый раз.
сразу json который приятнее,быстрее,лучше как для javascript(на клиенте или сервере) так и для php, ruby, python итд.
а что плохой тон - решать владельцу сайта. пихать картинки в шаблонах/стилях, использовать анимацию на javascript - тоже плохой тон во времена HTML5/CSS3.

Отредактировано MechanisM (01-09-2011 03:12:51)

28

Re: Icecast2 - почему вы дергаете статистику с помощью PHP?

как дернуть информацию из этого json подскажи, напиши пример

29

Re: Icecast2 - почему вы дергаете статистику с помощью PHP?

Ребят ну напишите уже кто нибудь

30

Re: Icecast2 - почему вы дергаете статистику с помощью PHP?

ajax-ом )

31

Re: Icecast2 - почему вы дергаете статистику с помощью PHP?

у меня не вышло.....

32

Re: Icecast2 - почему вы дергаете статистику с помощью PHP?

пишет MechanisM:

Icecast2 - почему вы дергаете статистику с помощью PHP?

Потому, что кэшируем страницу, в т.ч. число слушателей.
Но спасибо за совет с JSON — красиво.

Радио P.S.: 24/7 музыка, новости мира покера, книги по стратегии игры и интервью с успешными игроками.
Технически: AirTime, LiquidSoap, IceCast2. Слушать: mp3 128 kbps, ogg 128 kbps

33

Re: Icecast2 - почему вы дергаете статистику с помощью PHP?

пишет SergikS:

пишет MechanisM:

Icecast2 - почему вы дергаете статистику с помощью PHP?

Потому, что кэшируем страницу, в т.ч. число слушателей.
Но спасибо за совет с JSON — красиво.

а полученный json можно хранить в Cookies или HTML5 LocalStorage) или тоже кешировать.
ну и все делается на стороне клиента используя CPU клиента что дает сервачку возможность "остыть" и не работать лишний раз.

Отредактировано MechanisM (23-09-2011 21:43:19)

34

Re: Icecast2 - почему вы дергаете статистику с помощью PHP?

пишет Klef:

сбрасывать нагрузку с сервера на пользователей это плохой тон.

еще немного на тему этого: вконтакте при загрузке фоток уменьшает их на стороне клиента. сервер при этом только принимает уже сжатые и обработанные фотки.
плохо это не уметь использовать ресурсы клиентов в своих целях и на благо пользователям)

Отредактировано MechanisM (23-09-2011 21:48:34)

35

Re: Icecast2 - почему вы дергаете статистику с помощью PHP?

Очень плохой способ. Я думал намного лучше будет.
Если в тегах будет символ кавычки, то он пойдет в ответ как есть, а не в виде quot, в результате все крешется
Происходит это потому, что айскаст юзает libxml2, а она очень хитро это дело обрабатывает (сделал патч тегов, но либа развернула обратно). Патчить либу на стал, сделал себе няшную сохранялку при смене трека.
Второй недостаток в том, что при каждом реквесте мы насилуем айскаст и генерим новый жсон, что жрет ресурсы.

пишет MechanisM:

полученный json можно хранить в Cookies или HTML5 LocalStorage) или тоже кешировать.

Ну это вообще пушка. Откуда клиенту знать, до каких пор его кешировать? В этом и весь смысл поллинга, что клиент как можно чаще обращается к серверу, а тот отдает обновления по мере изменений.

При этом можно еще немного байтиков заработать: у меня сохраняются json-файлики последовательно, т.е. 1, 2, 3... и т.д, что позволяет плееру дергать только последний. А пока последнего нету - клиенту отдается 404. Как только тег сменился, появляется новый файлик, клиент его получает и долбит уже следующий. Небольшая, но экономия.

???








---------------------------------------
С наилучшими пожеланиями, IceMaster.
Все виды трансляций. Самые сложные варианты.
Патчи для открытых серверов, cобственные системы управления.
Создание эксклюзивных решений стриминга под любые, самые необычные запросы клиентов.
PHP-обезьянкой не работаю, плееры по 10 баксов не делаю. Делаю сложные и интересные проекты.

36

Re: Icecast2 - почему вы дергаете статистику с помощью PHP?

Статьи про здоровье и правильное питание, Онкология кишечника
симптомы болезней, информацию про народную медицину.       
http://medbaz.com/uploads/news/1933/8.jpg                                       
У нас вы найдёте различные медицинские услуги,  Страх одиночества
здоровье человека, диеты, лечение болезней.

Добавлено спустя     2 минуты   57 секунд:
Статьи про здоровье и правильное питание, Родничок у младенцев
симптомы болезней, информацию про народную медицину.       
http://medbaz.com/uploads/news/1933/8.jpg                                       
У нас вы найдёте различные медицинские услуги,  Замена клапана сердца
здоровье человека, диеты, лечение болезней.

Добавлено спустя     6 минут   52 секунды:
Статьи про здоровье и правильное питание, Лекарства от боли в горле
симптомы болезней, информацию про народную медицину.       
http://medbaz.com/uploads/news/1933/8.jpg                                       
У нас вы найдёте различные медицинские услуги,  Лечение ломки
здоровье человека, диеты, лечение болезней.

37

Re: Icecast2 - почему вы дергаете статистику с помощью PHP?

пишет MechanisM:

ну и все делается на стороне клиента используя CPU клиента что дает сервачку возможность "остыть" и не работать лишний раз.

На первый взгляд всё вроде бы и правильно, но айскаст этот json-вывод отдает не как статику, а генерирует каждый раз по-новому. И даже если бы это была статика, Icecast по этим вопросам лучше не трогать, для этого есть Nginx, Lighttpd и иже с ними. Не зря ведь в конфиге айскаста под clients подразумеваются не только слушатели, но и любые другие клиенты, подключившиеся к нему. И если перекинуть на него ещё и запросы всех слушателей, нагрузка, как здесь уже правильно заметили, увеличится во много раз. Ведь один раз в несколько секунд запрос на генерацию будет отправлять не один PHP-скрипт, а несколько десятков/сотен/etc. клиентов. В результате сомнительный выигрыш в производительности переростает в серьезную угрозу. И пока один сервачок, который мог бы и поработать, будет "остывать", другой, который лучше бы без необходимости лишний раз не трогать, отвалится и растеряет всех слушателей. Перечитай свой же пост http://mechanism.name/post/11281527922, точнее подпись к демотиватору, на редкость не бестолковую.

Хотя сама идея с распределением нагрузки правильная. Было бы разумно настроить сбор статистики по айскастам все-таки PHP-скриптом с последующим сохранением результатов в статический json-файл, который уже, в свою очередь, будет раздаваться клиентам.

Я сто лет назад подобное уже делал, правда с другой целью. Вот мой вариант status.xsl с json-выводом. Проверялось PHP-функцией json_decode(), работает. То, что переносы не расставлены -- это так надо.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
 xmlns:js="http://muttmansion.com">
<xsl:output method="text" />
<xsl:template match="/icestats">var sources = [<xsl:for-each select="source">
<xsl:if test="position() > 1">,</xsl:if>
{mount:'<xsl:value-of select="@mount" />',<xsl:if test="name">name:'<xsl:value-of select="name" />',</xsl:if>
<xsl:if test="server_type">content_type:'<xsl:value-of select="server_type" />',</xsl:if>
<xsl:if test="stream_start">stream_start:'<xsl:value-of select="stream_start" />',</xsl:if>
<xsl:if test="bitrate">bitrate:'<xsl:value-of select="bitrate" />',</xsl:if>
<xsl:if test="quality">quality:'<xsl:value-of select="quality" />',</xsl:if>
<xsl:if test="listener_peak">listener_peak:'<xsl:value-of select="listener_peak" />',</xsl:if>
<xsl:if test="genre">genre:'<xsl:value-of select="genre" />',</xsl:if>
<xsl:if test="description">description:'<xsl:value-of select="description" />',</xsl:if>
<xsl:if test="server_url">server_url:'<xsl:value-of select="server_url" />',</xsl:if>
<xsl:if test="artist">artist:'<xsl:value-of select="artist" />',</xsl:if>
<xsl:if test="title">title:'<xsl:value-of select="title" />',</xsl:if>
<xsl:if test="url">url:'<xsl:value-of select="url" />'</xsl:if>listeners:'<xsl:value-of select="listeners" />'}</xsl:for-each>
];</xsl:template></xsl:stylesheet>

Добавлено спустя     2 минуты   37 секунд:

пишет MechanisM:

Я тебе в аську стучался, прошел антибота и ноль ответов.

Показать / Cкрыть текст

причем 11 секунд ушло на размышление
лол программисты блеать

Отредактировано burn (17-12-2011 16:18:44)

38

Re: Icecast2 - почему вы дергаете статистику с помощью PHP?

И опять не починены кавычки. Да еще и одиночные, которые постоянно встречаются в тегах вида Prishla osen'

Генерировать статику через поллинг статистики - двойной идиотизм. Клиенту нужны свежие данные, а не когда оно там в очередной раз просрется. Неужели так сложно залезть в стату и прикрутить сохранение файла?

???








---------------------------------------
С наилучшими пожеланиями, IceMaster.
Все виды трансляций. Самые сложные варианты.
Патчи для открытых серверов, cобственные системы управления.
Создание эксклюзивных решений стриминга под любые, самые необычные запросы клиентов.
PHP-обезьянкой не работаю, плееры по 10 баксов не делаю. Делаю сложные и интересные проекты.

39

Re: Icecast2 - почему вы дергаете статистику с помощью PHP?

Писал под себя, и, как указал ранее, под другие цели. Поэтому вопроса с кавычками не возникало. Если у Вас есть какие-либо наработки по этому поводу, имеет смысл опубликовать их здесь, дополнив тот или иной предложенный код, вместо ведения многозначительных, но в то же время пустых разговоров вокруг да около. Ну или не вести их вообще, если хотите держать свои наработки при себе (на что имеете полное право, которое никто не оспаривает). То же самое и с вопросом сохранения файла. Подход крайне прост и известен давно: сказал А -- говори и Б.

пишет IceMaster:

Генерировать статику через поллинг статистики - двойной идиотизм. Клиенту нужны свежие данные, а не когда оно там в очередной раз просрется. Неужели так сложно залезть в стату и прикрутить сохранение файла?

Почему идиотизм? Зависит от ситуации, и не надо здесь обобщать.

Например, если требуется вывести на сайте количество слушателей с нескольких серверов Icecast, то вариант с сохранением файла на каждом из них будет не самой лучшей идеей, ведь это лишний, ненужный шаг во всем процессе. И где идиотизм в проходе PHP-скриптом по каждому status_json.xsl, сбору статистики и сохранению её в общий stat.json на сайте радиостанции, который уже будут забирать все браузеры и рендерить в человекопонятный вид у себя на стороне?

40

Re: Icecast2 - почему вы дергаете статистику с помощью PHP?

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

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

void
logging_playlist (const char *mount, const char *metadata, long listeners)
{
  char datebuf[128];
  struct tm thetime;
  time_t now;

  char buff[5000];
  int len = strnlen (metadata, 5000);
  if (len < 5000)
    {
      strncpy (buff, metadata, len + 1);
      int i;
      for (i = len; i >= 0; i--)
        {
          if (buff[i] == '"')
            {
              memmove (buff + i + 1, buff + i, len - i + 1);
              buff[i] = '\\';
            }
        }

      ice_config_t *conf = config_get_config ();
      char fn_json[FILENAME_MAX];
      snprintf (fn_json, FILENAME_MAX, "%s%sstat.js",
                conf != NULL ? conf->webroot_dir : ".", PATH_SEPARATOR);

      FILE *json = fopen (fn_json, "w");
      fprintf (json, "play_callback(\"%s\",%ld);", buff, listeners);
      fclose (json);
    }

Сделано было под МОИ нужды, хотя можно поправить под что угодно. Кавычки эскейпятся, битый жсон не приходит. Использован коллбек, а не переменная, дабы можно было отправлять запрос на чужой домен/порт. Обновление происходит при смене трека, в ту самую секунду, когда сменился оный, а не когда поллер просрется. Создается статика, которую можно отдавать хоть айскастом, хоть нгинксом. И никакого похапе. Под "мои цели".

Что касается нескольких серверов, то я бы предпочел сохранять файлик на каждом из них, дабы когда часть серверов сдохнет, плеер продолжал играть, асинхронно опрашивая оставшихся в живых и опционально переходя на них, если играемый отвалился. Но опять, каждый сходит с ума по своему.

А идиотизм потому, что накушался этого говна, которое досталось мне в наследство: тег меняется, а плеер еще минуту-другую кажет старый, ибо сначала должен обработать похапе-скрипт раз в минуту, а потом еще плеер должен опросить. Такая слоупочность плеера адово выбешивала.

???








---------------------------------------
С наилучшими пожеланиями, IceMaster.
Все виды трансляций. Самые сложные варианты.
Патчи для открытых серверов, cобственные системы управления.
Создание эксклюзивных решений стриминга под любые, самые необычные запросы клиентов.
PHP-обезьянкой не работаю, плееры по 10 баксов не делаю. Делаю сложные и интересные проекты.

41

Re: Icecast2 - почему вы дергаете статистику с помощью PHP?

Кавычки, запятые - знакомые подводные камни.
Пользуюсь подобными способом.
Создаю в директории icecast/web файл .xsl
С содержимым, которое выводит только название текущего трека.

<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output omit-xml-declaration="no" method="html"  indent="yes" encoding="UTF-8" />
<xsl:template match = "/icestats" >
<xsl:for-each select="source">
<xsl:if test="artist"><xsl:value-of select="artist" /> - </xsl:if><xsl:value-of select="title" />
</xsl:for-each></xsl:template></xsl:stylesheet>

Далее, имеется php файл, который каждую минуту по крону, записывает название трека с file.xsl, в текстовик и отправляет этот текстовик на фтп сайта радио.
А уже на сайте под радио, ajax'ом jquery, содержимое текстовика выводится через  (В эфире: <div id="ajax">...</div>)

Radiodev - coming soon.

42

Re: Icecast2 - почему вы дергаете статистику с помощью PHP?

пишет IceMaster:

Просто когда у диджея кавычка в тегах вылезает и от этого падает все и вся - это извините, пиздец, а не личные цели.

Ну "у меня", даже если бы и нарисовалась кавычка, все и вся бы не попадало. Но еще раз повторяю, что json для вывода artist/title не использовал.

пишет IceMaster:

Хотя я верю, что в том стриме, что был у тебя, всегда торчало одно название, поэтому проблем и не возникало.

ok whatever

Отредактировано burn (18-12-2011 01:07:46)

43

Re: Icecast2 - почему вы дергаете статистику с помощью PHP?

выложил обновленную версию json.xsl с jquery http://radiotalk.ru/viewtopic.php?pid=34480

пишет burn:

причем 11 секунд ушло на размышление
лол программисты блеать

с чего ты взял что я все эти 11 секунд думал?

насчет сначала умножение потом сложение - реально не знал и считаю это не логичным. я привык к последовательности.
то чему учили в школе нифига не помню уже закончил 11-й класс в 2000-м году))

Отредактировано MechanisM (20-12-2011 08:51:43)

44

Re: Icecast2 - почему вы дергаете статистику с помощью PHP?

если у кого-то проблемы с кавычками можете тут посмотреть решения http://www.ibm.com/developerworks/ru/li … -xml2json/

45

Re: Icecast2 - почему вы дергаете статистику с помощью PHP?

А я уничтожил все кавычки из тегов )

------------------------
http://radio-electron.ru/img/logo_small.gif
http://radio-electron.ru/play