Aller au contenu

push-stream: module de flux push NGINX

Installation

Vous pouvez installer ce module dans n'importe quelle distribution basée sur RHEL, y compris, mais sans s'y limiter :

  • RedHat Enterprise Linux 7, 8, 9 et 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 et 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

Activez le module en ajoutant ce qui suit en haut de /etc/nginx/nginx.conf :

load_module modules/ngx_http_push_stream_module.so;

Ce document décrit nginx-module-push-stream v0.6.0 publié le 09 mai 2024.


Une technologie de push HTTP en flux pur pour votre configuration Nginx.

Comet rendue facile et vraiment évolutive.

Prend en charge EventSource, WebSocket, Long Polling, et Forever Iframe. Voir quelques exemples ci-dessous.

_Ce module n'est pas distribué avec la source de Nginx. Voir les instructions d'installation

Disponible sur github à nginx_push_stream_module

Changelog

Consultez toujours CHANGELOG.textile pour voir les nouveautés.

Contribuer

Après avoir essayé ce module et l'avoir apprécié, n'hésitez pas à donner quelque chose en retour, et à aider à la maintenance du projet ;)

Configuration de base

    # ajoutez le push_stream_shared_memory_size à votre contexte http
    http {
       push_stream_shared_memory_size 32M;

        # définissez les points de terminaison de l'éditeur et de l'abonné dans votre contexte serveur
        server {
           location /channels-stats {
                # activez le mode statistiques des canaux pour cet emplacement
                push_stream_channels_statistics;

                # identifiant de canal basé sur la chaîne de requête
                push_stream_channels_path               $arg_id;
            }

            location /pub {
               # activez le mode éditeur (admin) pour cet emplacement
               push_stream_publisher admin;

                # identifiant de canal basé sur la chaîne de requête
                push_stream_channels_path               $arg_id;
            }

            location ~ /sub/(.*) {
                # activez le mode abonné (streaming) pour cet emplacement
                push_stream_subscriber;

                # chemin de canal positionnel
                push_stream_channels_path                   $1;
            }
        }
    }

Utilisation de base

Vous pouvez ressentir l'ambiance dès maintenant à la ligne de commande. Essayez d'utiliser plus de
un terminal et commencez à jouer avec 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!'

    # Statistiques des canaux pour l'éditeur (format json)
    curl -s -v 'http://localhost/pub?id=my_channel_1'

    # Toutes les statistiques des canaux résumées (format json)
    curl -s -v 'http://localhost/channels-stats'

    # Toutes les statistiques des canaux détaillées (format json)
    curl -s -v 'http://localhost/channels-stats?id=ALL'

    # Statistiques des canaux détaillées avec préfixe (format json)
    curl -s -v 'http://localhost/channels-stats?id=your_channel_*'

    # Statistiques des canaux (format json)
    curl -s -v 'http://localhost/channels-stats?id=my_channel_1'

    # Supprimer les canaux
    curl -s -v -X DELETE 'http://localhost/pub?id=my_channel_1'

Quelques exemples  

FAQ  

Des doutes ?! Consultez la FAQ.

Rapport de bug  

Pour signaler un bug, veuillez fournir les informations suivantes lorsque c'est applicable :

  1. Quelle version du module push stream est utilisée (commit sha1) ?
  2. Quelle version de nginx est utilisée ?
  3. Configuration de Nginx en cours d'utilisation
  4. Sortie de la commande “nginx -V”
  5. Dump de noyau indiquant un échec dans le code du module. Consultez ici comment en produire un.
  6. Description étape par étape pour reproduire l'erreur.

Qui utilise le module ?  

Utilisez-vous ce module ? Ajoutez votre nom à la liste.

Client Javascript  

Il existe une implémentation de client javascript ici, qui est indépendante du framework. Essayez et aidez à l'améliorer. ;)

Directives

(1) Définir les emplacements, (2) Configuration principale, (3) Configuration des abonnés, (4) Configuration des éditeurs, (5) Configuration des statistiques des canaux, (6) Configuration WebSocket

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

Utilisation de la mémoire

Juste pour information, la quantité minimale de mémoire utilisée pour chaque objet est listée ci-dessous :

  • message sur partagé = 200 octets
  • canal sur partagé = 270 octets
  • abonné
    sur partagé = 160 octets
    sur système = 6550 octets

Tests

Les tests du serveur pour ce module sont écrits en Ruby et sont des tests d'acceptation, cliquez ici pour plus de détails.

Discussion

Groupe de discussion sur le module Push Stream Nginx Discussion Group

Contributeurs

Personnes

GitHub

Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-push-stream.