push-stream: Módulo de transmisión push de NGINX
Instalación
Puedes instalar este módulo en cualquier distribución basada en RHEL, incluyendo, pero no limitado a:
- RedHat Enterprise Linux 7, 8, 9 y 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 y 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
Habilita el módulo añadiendo lo siguiente en la parte superior de /etc/nginx/nginx.conf:
load_module modules/ngx_http_push_stream_module.so;
Este documento describe nginx-module-push-stream v0.6.0 lanzado el 09 de mayo de 2024.
Una tecnología de transmisión http push pura para tu configuración de Nginx.
Comet simplificada y realmente escalable.
Soporta EventSource, WebSocket, Long Polling, y Forever Iframe. Consulta algunos ejemplos a continuación.
_Este módulo no se distribuye con el código fuente de Nginx. Consulta las instrucciones de instalación
Disponible en github en nginx_push_stream_module
Changelog
Siempre revisa CHANGELOG.textile para ver qué hay de nuevo.
Contribuir
Después de probar este módulo y si te gusta, siéntete libre de devolver algo,
y ayudar en el mantenimiento del proyecto ;)

Configuración Básica
# agrega push_stream_shared_memory_size a tu contexto http
http {
push_stream_shared_memory_size 32M;
# define los puntos finales de publicador y suscriptor en tu contexto de servidor
server {
location /channels-stats {
# activa el modo de estadísticas de canales para esta ubicación
push_stream_channels_statistics;
# id de canal basado en cadena de consulta
push_stream_channels_path $arg_id;
}
location /pub {
# activa el modo de publicador (administrador) para esta ubicación
push_stream_publisher admin;
# id de canal basado en cadena de consulta
push_stream_channels_path $arg_id;
}
location ~ /sub/(.*) {
# activa el modo de suscriptor (streaming) para esta ubicación
push_stream_subscriber;
# ruta de canal posicional
push_stream_channels_path $1;
}
}
}
Uso Básico
Puedes sentir la experiencia ahora mismo en la línea de comandos. Intenta usar más de
una terminal y comienza a jugar con http pubsub:
# Subs
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'
# Pubs
curl -s -v -X POST 'http://localhost/pub?id=my_channel_1' -d '¡Hola Mundo!'
curl -s -v -X POST 'http://localhost/pub?id=your_channel_1' -d '¡Hola a todos!'
curl -s -v -X POST 'http://localhost/pub?id=your_channel_2' -d '¡Adiós!'
# Estadísticas de Canales para el publicador (formato json)
curl -s -v 'http://localhost/pub?id=my_channel_1'
# Todas las Estadísticas de Canales resumidas (formato json)
curl -s -v 'http://localhost/channels-stats'
# Todas las Estadísticas de Canales detalladas (formato json)
curl -s -v 'http://localhost/channels-stats?id=ALL'
# Estadísticas de Canales detalladas con prefijo (formato json)
curl -s -v 'http://localhost/channels-stats?id=your_channel_*'
# Estadísticas de Canales (formato json)
curl -s -v 'http://localhost/channels-stats?id=my_channel_1'
# Eliminar Canales
curl -s -v -X DELETE 'http://localhost/pub?id=my_channel_1'
Algunos Ejemplos
- Ejemplos de Curl
- Forever (oculto) iFrame
- Event Source
- WebSocket
- Long Polling
- JSONP
- M-JPEG
- Otros ejemplos
FAQ
¿Dudas?! Consulta la FAQ.
Informe de errores
Para informar un error, proporciona la siguiente información cuando sea aplicable:
- ¿Qué versión del módulo de transmisión push se está utilizando (commit sha1)?
- ¿Qué versión de nginx se está utilizando?
- Configuración de Nginx en uso
- Salida del comando “nginx -V”
- Volcado de núcleo que indica un fallo en el código del módulo. Consulta aquí cómo producir uno.
- Descripción paso a paso para reproducir el error.
¿Quién está usando el módulo?
¿Usas este módulo? Pon tu nombre en la lista.
Cliente Javascript
Hay una implementación de cliente javascript aquí, que es independiente del marco. Intenta y ayuda a mejorarlo. ;)
Directivas
(1) Definiendo ubicaciones, (2) Configuración principal, (3) Configuración de suscriptores, (4) Configuración de publicadores, (5) Configuración de estadísticas de canales, (6) Configuración de WebSocket
Uso de memoria
A continuación se lista la cantidad mínima de memoria utilizada para cada objeto:
- mensaje en compartido = 200 bytes
- canal en compartido = 270 bytes
- suscriptor
en compartido = 160 bytes
en sistema = 6550 bytes
Pruebas
Las pruebas del servidor para este módulo están escritas en Ruby, y son pruebas de aceptación, haz clic aquí para más detalles.
Discusión
Grupo de discusión del Módulo de Transmisión Push de Nginx Discussion Group
Contribuidores
GitHub
Puedes encontrar consejos adicionales de configuración y documentación para este módulo en el repositorio de GitHub para nginx-module-push-stream.