Метод Websocket для обработки метаданных Icecast? - PullRequest
0 голосов
/ 26 апреля 2018

Я управляю веб-сайтом сканеров общественных служб, который позволяет людям слушать полицию, увольнять и т. Д. Он транслируется через Icecast на Ubuntu из бэкэнда, и я запускаю интерфейсный веб-сайт из Joomla на IIS / PHP.

У меня есть скрипт Python на сервере потоковой передачи, который анализирует информацию с дисплея радиостанции сканера, чтобы захватить текущую частоту / разговорную группу и применить ее к названию песни потока. Затем AJAX-запрос на интерфейсном веб-сайте запрашивает название песни на сервере icecast каждые 5 секунд, так как это меняется довольно часто.

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

Я начал играть с icecast-stack, модулем mpn, который является частью node.js. Хотя это казалось многообещающим, мне трудно понять, как это реализовать. Похоже, что в разработке находится полноценный игрок icecast / html5 / node.js, но он еще не завершен.

Моя вторая мысль - использовать node.js для построения чата клиент / сервер. Эта концепция имеет смысл, поскольку посетители будут «клиентом» чата, а также самим сервером icecast, отправляющим сообщения на сервер чата. Где я борюсь с этим, так это с моим скриптом Python на сервере Icecast; Как отправить переменную в Python на сервер чата node.js?

Если у кого-нибудь есть пример кода, которым можно поделиться, или, возможно, вообще есть другая идея, я был бы очень признателен.

Большое спасибо!

1 Ответ

0 голосов
/ 27 апреля 2018

WebSockets для двусторонней связи, которая вам не нужна. Вместо этого используйте отправленные сервером события .

На клиенте вы будете делать что-то вроде этого:

const metaEventSource = new EventSource('/metadata');
metaEventSource.addEventListener('message', (e) => {
  console.log(e.data);
});

На стороне сервера доступно множество абстракций в зависимости от того, какой стек вы в конечном итоге выберете. Это простой текстовый формат ответа:

event: metadata
data: Your new metadata goes here
...