Перейти к содержанию

push-stream: Модуль потоковой передачи NGINX

Установка на Debian/Ubuntu

Эти документы применимы к пакету APT nginx-module-push-stream, предоставленному репозиторием GetPageSpeed Extras.

  1. Настройте репозиторий APT, как описано в настройке репозитория APT.
  2. Установите модуль:
sudo apt-get update
sudo apt-get install nginx-module-push-stream
Показать дистрибутивы и архитектуры
| Дистрибутив | Версия  | Компонент  | Архитектуры  |
|-------------|---------|------------|---------------|
| debian      | bookworm| main       | amd64, arm64  |
| debian      | trixie  | main       | amd64, arm64  |
| ubuntu      | focal   | main       | amd64, arm64  |
| ubuntu      | jammy   | main       | amd64, arm64  |
| ubuntu      | noble   | main       | amd64, arm64  |

Чистая технология HTTP push для вашего Nginx.

Comet станет проще и действительно масштабируемым.

Поддерживает EventSource, WebSocket, долгое опросивание и Forever Iframe. Смотрите некоторые примеры ниже.

_Этот модуль не распространяется вместе с исходным кодом Nginx. Смотрите инструкции по установке.

Доступен на GitHub по адресу nginx_push_stream_module

Список изменений

Всегда заглядывайте в CHANGELOG.textile, чтобы увидеть, что нового.

Участие

После того как вы опробуете этот модуль и вам он понравится, не стесняйтесь вернуть что-то обратно и помочь в обслуживании проекта ;)

Статус

Этот модуль считается готовым к производству.

Базовая конфигурация

    # добавьте push_stream_shared_memory_size в ваш http контекст
    http {
       push_stream_shared_memory_size 32M;

        # определите конечные точки для издателя и подписчика в вашем контексте сервера
        server {
           location /channels-stats {
                # активируйте режим статистики каналов для этого местоположения
                push_stream_channels_statistics;

                # канал на основе строки запроса
                push_stream_channels_path               $arg_id;
            }

            location /pub {
               # активируйте режим издателя (админа) для этого местоположения
               push_stream_publisher admin;

                # канал на основе строки запроса
                push_stream_channels_path               $arg_id;
            }

            location ~ /sub/(.*) {
                # активируйте режим подписчика (стриминга) для этого местоположения
                push_stream_subscriber;

                # позиционный путь канала
                push_stream_channels_path                   $1;
            }
        }
    }

Основное использование

Вы можете почувствовать атмосферу прямо сейчас в командной строке. Попробуйте использовать более одного терминала и начните играть с http pubsub:

    # Подписки
    curl -s -v --no-buffer 'http://localhost/sub/my_channel_1'
    curl -s -v --no-buffer 'http://localhost/sub/your_channel_1'
    curl -s -v --no-buffer 'http://localhost/sub/your_channel_2'

    # Публикации
    curl -s -v -X POST 'http://localhost/pub?id=my_channel_1' -d 'Hello World!'
    curl -s -v -X POST 'http://localhost/pub?id=your_channel_1' -d 'Hi everybody!'
    curl -s -v -X POST 'http://localhost/pub?id=your_channel_2' -d 'Goodbye!'

    # Статистика каналов для издателя (формат json)
    curl -s -v 'http://localhost/pub?id=my_channel_1'

    # Статистика всех каналов в обобщенном виде (формат json)
    curl -s -v 'http://localhost/channels-stats'

    # Подробная статистика всех каналов (формат json)
    curl -s -v 'http://localhost/channels-stats?id=ALL'

    # Подробная статистика каналов с префиксом (формат json)
    curl -s -v 'http://localhost/channels-stats?id=your_channel_*'

    # Статистика каналов (формат json)
    curl -s -v 'http://localhost/channels-stats?id=my_channel_1'

    # Удалить каналы
    curl -s -v -X DELETE 'http://localhost/pub?id=my_channel_1'

Некоторые примеры  

Часто задаваемые вопросы  

Есть сомнения?! Проверьте Часто задаваемые вопросы.

Сообщение об ошибке  

Чтобы сообщить об ошибке, пожалуйста, предоставьте следующую информацию, когда это применимо:

  1. Какая версия модуля потоковой передачи используется (commit sha1)?
  2. Какая версия nginx используется?
  3. Конфигурация Nginx в использовании
  4. Вывод команды “nginx -V”
  5. Дамп ядра, указывающий на сбой в коде модуля. Проверьте здесь, как его получить.
  6. Пошаговое описание для воспроизведения ошибки.

Кто использует модуль?  

Используете этот модуль? Укажите свое имя в списке.

Javascript клиент  

Существует реализация javascript клиента здесь, которая не зависит от фреймворка. Попробуйте и помогите улучшить его. ;)

Директивы

(1) Определение местоположений, (2) Основная конфигурация, (3) Конфигурация подписчиков, (4) Конфигурация издателей, (5) Конфигурация статистики каналов, (6) Конфигурация WebSocket

Директива (1) (2) (3) (4) (5) (6)
push_stream_channels_statistics   x   -   -   -   -   -
push_stream_publisher   x   -   -   -   -   -
push_stream_subscriber   x   -   -   -   -   -
push_stream_shared_memory_size   -   x   -   -   -   -
push_stream_channel_deleted_message_text   -   x   -   -   -   -
push_stream_channel_inactivity_time   -   x   -   -   -   -
push_stream_ping_message_text   -   x   -   -   -   -
push_stream_timeout_with_body   -   x   -   -   -   -
push_stream_message_ttl   -   x   -   -   -   -
push_stream_max_subscribers_per_channel   -   x   -   -   -   -
push_stream_max_messages_stored_per_channel   -   x   -   -   -   -
push_stream_max_channel_id_length   -   x   -   -   -   -
push_stream_max_number_of_channels   -   x   -   -   -   -
push_stream_max_number_of_wildcard_channels   -   x   -   -   -   -
push_stream_wildcard_channel_prefix   -   x   -   -   -   -
push_stream_events_channel_id   -   x   -   -   -   -
push_stream_channels_path   -   -   x   x   x   x
push_stream_store_messages   -   -   -   x   -   x
push_stream_channel_info_on_publish   -   -   -   x   -   -
push_stream_authorized_channels_only   -   -   x   -   -   x
push_stream_header_template_file   -   -   x   -   -   x
push_stream_header_template   -   -   x   -   -   x
push_stream_message_template   -   -   x   -   -   x
push_stream_footer_template   -   -   x   -   -   x
push_stream_wildcard_channel_max_qtd   -   -   x   -   -   x
push_stream_ping_message_interval   -   -   x   -   -   x
push_stream_subscriber_connection_ttl   -   -   x   -   -   x
push_stream_longpolling_connection_ttl   -   -   x   -   -   -
push_stream_websocket_allow_publish   -   -   -   -   -   x
push_stream_last_received_message_time   -   -   x   -   -   -
push_stream_last_received_message_tag   -   -   x   -   -   -
push_stream_last_event_id   -   -   x   -   -   -
push_stream_user_agent   -   -   x   -   -   -
push_stream_padding_by_user_agent   -   -   x   -   -   -
push_stream_allowed_origins   -   -   x   -   -   -
push_stream_allow_connections_to_events_channel   -   -   x   -   -   x

Использование памяти

Ниже приведена информация о минимальном объеме памяти, используемом для каждого объекта:

  • сообщение в общем = 200 байт
  • канал в общем = 270 байт
  • подписчик
    в общем = 160 байт
    в системе = 6550 байт

Тесты

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

Дискуссия

Модуль потоковой передачи Nginx Группа обсуждения

Участники

Люди