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'
Некоторые примеры
- Примеры Curl
- Forever (скрытый) iFrame
- Event Source
- WebSocket
- Long Polling
- JSONP
- M-JPEG
- Другие примеры
Часто задаваемые вопросы
Есть сомнения?! Проверьте Часто задаваемые вопросы.
Сообщение об ошибке
Чтобы сообщить об ошибке, пожалуйста, предоставьте следующую информацию, если это применимо:
- Какая версия модуля push stream используется (commit sha1)?
- Какая версия nginx используется?
- Конфигурация Nginx в использовании
- Вывод команды “nginx -V”
- Дамп памяти, указывающий на сбой в коде модуля. Посмотрите здесь, как его создать.
- Пошаговое описание для воспроизведения ошибки.
Кто использует модуль?
Вы используете этот модуль? Укажите ваше имя в списке.
Javascript клиент
Существует реализация javascript клиента здесь, которая не зависит от фреймворка. Попробуйте и помогите улучшить его. ;)
Директивы
(1) Определение местоположений, (2) Основная конфигурация, (3) Конфигурация подписчиков, (4) Конфигурация издателей, (5) Конфигурация статистики каналов, (6) Конфигурация WebSocket
Использование памяти
Ниже приведена информация о минимальном объеме памяти, используемом для каждого объекта:
- сообщение в общей памяти = 200 байт
- канал в общей памяти = 270 байт
- подписчик в общей памяти = 160 байт в системе = 6550 байт
Тесты
Тесты сервера для этого модуля написаны на Ruby и являются тестами приемки, нажмите здесь для получения дополнительных сведений.
Обсуждение
Группа Обсуждения модуля Nginx Push Stream
Участники
GitHub
Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-push-stream.