push-stream: Módulo de push stream do NGINX
Instalação
Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:
- RedHat Enterprise Linux 7, 8, 9 e 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 e 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
Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:
load_module modules/ngx_http_push_stream_module.so;
Este documento descreve o nginx-module-push-stream v0.6.0 lançado em 09 de maio de 2024.
Uma tecnologia de push http stream pura para sua configuração do NGINX.
Comet facilitado e realmente escalável.
Suporta EventSource, WebSocket, Long Polling e Forever Iframe. Veja alguns exemplos abaixo.
_Este módulo não é distribuído com o código-fonte do NGINX. Veja as instruções de instalação
Disponível no GitHub em nginx_push_stream_module
Changelog
Sempre dê uma olhada em CHANGELOG.textile para ver o que há de novo.
Contribua
Depois de experimentar este módulo e gostar, sinta-se à vontade para retribuir e ajudar na manutenção do projeto ;)

Configuração Básica
# adicione o push_stream_shared_memory_size ao seu contexto http
http {
push_stream_shared_memory_size 32M;
# defina os endpoints de publisher e subscriber no seu contexto de servidor
server {
location /channels-stats {
# ative o modo de estatísticas de canais para esta localização
push_stream_channels_statistics;
# id do canal baseado na string de consulta
push_stream_channels_path $arg_id;
}
location /pub {
# ative o modo de publisher (admin) para esta localização
push_stream_publisher admin;
# id do canal baseado na string de consulta
push_stream_channels_path $arg_id;
}
location ~ /sub/(.*) {
# ative o modo de subscriber (streaming) para esta localização
push_stream_subscriber;
# caminho do canal posicional
push_stream_channels_path $1;
}
}
}
Uso Básico
Você pode sentir a experiência agora mesmo na linha de comando. Tente usar mais de um terminal e comece a brincar com 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 '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!'
# Estatísticas dos Canais para publisher (formato json)
curl -s -v 'http://localhost/pub?id=my_channel_1'
# Todas as Estatísticas dos Canais resumidas (formato json)
curl -s -v 'http://localhost/channels-stats'
# Todas as Estatísticas dos Canais detalhadas (formato json)
curl -s -v 'http://localhost/channels-stats?id=ALL'
# Estatísticas dos Canais detalhadas com prefixo (formato json)
curl -s -v 'http://localhost/channels-stats?id=your_channel_*'
# Estatísticas dos Canais (formato json)
curl -s -v 'http://localhost/channels-stats?id=my_channel_1'
# Deletar Canais
curl -s -v -X DELETE 'http://localhost/pub?id=my_channel_1'
Alguns Exemplos
- Exemplos de Curl
- Forever (oculto) iFrame
- Event Source
- WebSocket
- Long Polling
- JSONP
- M-JPEG
- Outros exemplos
FAQ
Dúvidas?! Confira a FAQ.
Relato de Bug
Para relatar um bug, forneça as seguintes informações quando aplicável:
- Qual versão do módulo push stream está sendo usada (commit sha1)?
- Qual versão do nginx está sendo usada?
- Configuração do NGINX em uso
- Saída do comando “nginx -V”
- Core dump indicando uma falha no código do módulo. Confira aqui como produzir um.
- Descrição passo a passo para reproduzir o erro.
Quem está usando o módulo?
Você usa este módulo? Coloque seu nome na lista.
Cliente Javascript
Há uma implementação de cliente javascript aqui, que é independente de framework. Tente e ajude a melhorá-la. ;)
Diretivas
(1) Definindo localizações, (2) Configuração principal, (3) Configuração de Subscribers, (4) Configuração de Publishers, (5) Configuração de Estatísticas de Canais, (6) Configuração de WebSocket
Uso de Memória
Abaixo estão listadas as informações sobre a quantidade mínima de memória usada para cada objeto:
- mensagem em compartilhada = 200 bytes
- canal em compartilhada = 270 bytes
- subscriber
em compartilhada = 160 bytes
em sistema = 6550 bytes
Testes
Os testes do servidor para este módulo estão escritos em Ruby e são testes de aceitação, clique aqui para mais detalhes.
Discussão
Grupo de Discussão do Módulo Push Stream do NGINX Discussion Group
Contribuidores
GitHub
Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório GitHub do nginx-module-push-stream.