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

push-stream: Модуль push stream для NGINX

Установка

Вы можете установить этот модуль в любом дистрибутиве на базе RHEL, включая, но не ограничиваясь:

  • RedHat Enterprise Linux 7, 8, 9 и 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 и Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-push-stream
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-push-stream

Включите модуль, добавив следующее в верхнюю часть /etc/nginx/nginx.conf:

load_module modules/ngx_http_push_stream_module.so;

Этот документ описывает nginx-module-push-stream v0.6.0, выпущенный 9 мая 2024 года.


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

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

Поддерживает EventSource, WebSocket, Long Polling и 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. Какая версия модуля push stream используется (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 Push Stream

Участники

Люди

GitHub

Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-push-stream.