点赞
评论
收藏
分享
举报
Nginx HTTP push操作模块
发表于2020-09-23 21:35

浏览 1.2k

文章标签

授权协议:
MIT license
原作者联系方式:
Wandenberg Peixoto <wandenberg@gmail.com>
功能说明:
支持http push操作。

Nginx Push Stream Module

A pure stream http push technology for your Nginx setup.

Comet made easy and really scalable.

Supports EventSourceWebSocket, Long Polling, and Forever Iframe. See some examples bellow.

This module is not distributed with the Nginx source. See the installation instructions.

Available on github at nginx_push_stream_module

Changelog

Always take a look at CHANGELOG.textile to see what’s new.

Contribute

After you try this module and like it, feel free to give something back, and help in the maintenance of the project ;)

Status

This module is considered production ready.

Basic Configuration

    # add the push_stream_shared_memory_size to your http context
    http {
       push_stream_shared_memory_size 32M;

        # define publisher and subscriber endpoints in your server context
        server {
           location /channels-stats {
                # activate channels statistics mode for this location
                push_stream_channels_statistics;

                # query string based channel id
                push_stream_channels_path               $arg_id;
            }

            location /pub {
               # activate publisher (admin) mode for this location
               push_stream_publisher admin;

                # query string based channel id
                push_stream_channels_path               $arg_id;
            }

            location ~ /sub/(.*) {
                # activate subscriber (streaming) mode for this location
                push_stream_subscriber;

                # positional channel path
                push_stream_channels_path                   $1;
            }
        }
    }

Basic Usage

You can feel the flavor right now at the command line. Try using more than
one terminal and start playing 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!'

    # Channels Stats for publisher (json format)
    curl -s -v 'http://localhost/pub?id=my_channel_1'

    # All Channels Stats summarized (json format)
    curl -s -v 'http://localhost/channels-stats'

    # All Channels Stats detailed (json format)
    curl -s -v 'http://localhost/channels-stats?id=ALL'

    # Prefixed Channels Stats detailed (json format)
    curl -s -v 'http://localhost/channels-stats?id=your_channel_*'

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

    # Delete Channels
    curl -s -v -X DELETE 'http://localhost/pub?id=my_channel_1'

Some Examples 

FAQ 

Doubts?! Check the FAQ.

Bug report 

To report a bug, please provide the following information when applicable

  1. Which push stream module version is been used (commit sha1)?
  2. Which nginx version is been used?
  3. Nginx configuration in use
  4. “nginx -V” command outuput
  5. Core dump indicating a failure on the module code. Check here how to produce one.
  6. Step by step description to reproduce the error.

Who is using the module? 

Do you use this module? Put your name on the list.

Javascript Client 

There is a javascript client implementation here, which is framework independent. Try and help improve it. ;)

Directives

(1) Defining locations, (2) Main configuration, (3) Subscribers configuration, (4) Publishers configuration, (5) Channels Statistics configuration, (6) WebSocket configuration

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

Installation 

    # clone the project
    git clone https://github.com/wandenberg/nginx-push-stream-module.git
    NGINX_PUSH_STREAM_MODULE_PATH=$PWD/nginx-push-stream-module

    # get desired nginx version (works with 1.2.0+)
    wget http://nginx.org/download/nginx-1.2.0.tar.gz

    # unpack, configure and build
    tar xzvf nginx-1.2.0.tar.gz
    cd nginx-1.2.0
    ./configure --add-module=../nginx-push-stream-module
    make

    # install and finish
    sudo make install

    # check
    sudo /usr/local/nginx/sbin/nginx -v
        nginx version: nginx/1.2.0

    # test configuration
    sudo /usr/local/nginx/sbin/nginx -c $NGINX_PUSH_STREAM_MODULE_PATH/misc/nginx.conf -t
        the configuration file $NGINX_PUSH_STREAM_MODULE_PATH/misc/nginx.conf syntax is ok
        configuration file $NGINX_PUSH_STREAM_MODULE_PATH/misc/nginx.conf test is successful

    # run
    sudo /usr/local/nginx/sbin/nginx -c $NGINX_PUSH_STREAM_MODULE_PATH/misc/nginx.conf

Memory usage

Just as information is listed below the minimum amount of memory used for each object:

  • message on shared = 200 bytes
  • channel on shared = 270 bytes
  • subscriber
    • on shared = 160 bytes
    • on system = 6550 bytes

Tests

The server tests for this module are written in Ruby, and are acceptance tests, click here for more details.

Discussion

Nginx Push Stream Module Discussion Group

Contributors


已修改于2023-03-06 07:43
创作不易,留下一份鼓励
皮皮鲁

暂无个人介绍

关注



写下您的评论
发表评论
全部评论(0)

按点赞数排序

按时间排序

关于作者
皮皮鲁
这家伙很懒还未留下介绍~
85
文章
2
问答
42
粉丝
相关文章
概述 Nginx 从 1.9.0 开始加入了 stream 模块支持四层的代理,转发和负载均衡。但是,stream 模块的功能相对简单。对需要 ALG 处理的协议比如 FTP 的支持也远远不够。我试着去修改了 Nginx 的源代码,添加了alg模块。使之支持了 FTP主动模式和被动模式下的 ALG 功能。 Github 的源码地址为 : https://github.com/pei-jikui/nginx-alg。代码本身不困难,困难的是如何把代码模块化,有机地融入nginx原有的框架结构中,尽量少地修改已有的框架代码。而后者,需要对stream模块乃至nginx本身的框架和代码有一定的熟悉程度。图 1:FTP被动模式 数据连接 图2 :FTP主动模式 数据连接可能大家会说,Passive 模式不需要ALG 。准确
点赞 6
浏览 3.8k
使用配置方式:install./configure--add-module={module_dir}&&make&&makeinstallconfserver{ listen80; client_max_body_size100m; location/{ roothtml/upload; } #Uploadformshouldbesubmittedtothislocation location/upload{ #Passalteredrequestbodytothislocation upload_pass/example.php; #Storefilestothisdirectory #Thedirectoryishashed,subdirectories0123456789shouldexist
点赞 3
浏览 2.8k
使用方法:1.创建tableCREATETABLE oauth_access_token (id int(10)NOTNULLAUTO_INCREMENT,access_token varchar(255)DEFAULTNULL,expires_in int(10)NOTNULL,last_used_time int(10)NOTNULL,PRIMARYKEY(id),KEY ACCESS_TOKEN (access_token))ENGINE=InnoDBDEFAULTCHARSET=utf8;2.安装Oauth模块cd/work/nginx-1.8.0&&./configure--add-module=/work/nginx-http-oauth-module&&make3.添加配置请参照源码连接中的nginx.conf 4.使用Oauth模块a)创建访问tokenhttp://192.168.1.104/token?appid=
点赞 3
浏览 2.1k