Pular para conteúdo

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  

FAQ  

Dúvidas?! Confira a FAQ.

Relato de Bug  

Para relatar um bug, forneça as seguintes informações quando aplicável:

  1. Qual versão do módulo push stream está sendo usada (commit sha1)?
  2. Qual versão do nginx está sendo usada?
  3. Configuração do NGINX em uso
  4. Saída do comando “nginx -V”
  5. Core dump indicando uma falha no código do módulo. Confira aqui como produzir um.
  6. 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

Diretiva (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

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

Pessoas

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.