github
Advanced Search
  • Home
  • Pricing and Signup
  • Explore GitHub
  • Blog
  • Login

slact / nginx_http_push_module

  • Admin
  • Watch Unwatch
  • Fork
  • Your Fork
  • Pull Request
  • Download Source
    • 371
    • 11
  • Source
  • Commits
  • Network (11)
  • Issues (13)
  • Downloads (6)
  • Graphs
  • Branch: master

click here to add a description

click here to add a homepage

  • Branches (4)
    • bugfixen
    • master ✓
    • multiplexing
    • streaming
  • Tags (6)
    • v0.692
    • v0.691
    • v0.69
    • 0.683
    • 0.681
    • 0.68
Sending Request…
Click here to lend your support to: nginx_http_push_module and make a donation at www.pledgie.com ! Edit Pledgie Setup

Pledgie Donations

Once activated, we'll place the following badge in your repository's detail box:
Pledgie_example
This service is courtesy of Pledgie.

Turn NGiNX into an adept HTTP push server. — Read more

  cancel

http://pushmodule.slact.net/

  cancel
  • Private
  • Read-Only
  • HTTP Read-Only

This URL has Read+Write access

0.692 - another small bugfix release 
slact (author)
Wed Feb 03 18:28:06 -0800 2010
commit  90ddd579f2d6f7569ee6666d9f4abb08d719c828
tree    fecb6c44d11f2490ad7e2ad7a46eaa5403a96a51
parent  349af1ec5f6d742af2e190b4b0b7e2f105dcdd96
nginx_http_push_module / README README
100644 188 lines (157 sloc) 7.832 kb
edit raw blame history
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
NGiNX HTTP push module - Turn NGiNX into an adept HTTP Push (Comet) server.
 
This module takes care of all the connection juggling, and exposes a simple
interface to broadcast messages to clients via plain old HTTP requests.
This makes it possible to write live-updating applications without having to
wait on idle connections via upstream proxies or making your code all
asynchronous and concurrent.
 
---------------- Configuration Directives & Variables ------------------------
Variables:
$push_channel_id
  A token uniquely identifying a communication channel. Must be present in the
  context of the push_subscriber and push_publisher directives.
  Example:
    set $push_channel_id $arg_id;
#channel id is now the url query string parameter "id"
#(/foo/bar?id=channel_id_string)
 
Directives:
 
==Publisher/Subscriber==
 
push_subscriber [ long-poll | interval-poll ]
  default: long-poll
  context: server, location
  Defines a server or location as a subscriber. This location represents a
  subscriber's interface to a channel's message queue. The queue is traversed
  automatically via caching information request headers (If-Modified-Since and
  If-None-Match), beginning with the oldest available message. Requests for
  upcoming messages are handled in accordance with the setting provided.
  See the protocol documentation for a detailed description.
 
push_subscriber_concurrency [ last | first | broadcast ]
  default: broadcast
  context: http, server, location
  Controls how multiple subscriber requests to a channel (identified by
  some common ID) are handled.
  The values work as follows:
   - broadcast: any number of concurrent subscriber requests may be held.
   - last: only the most recent subscriber request is kept, all others get
     a 409 Conflict response.
   - first: only the oldest subscriber request is kept, all others get a
     409 Conflict response.
 
push_publisher
  default: none
  context: server, location
  Defines a server or location as a message publisher. Requests to a publisher
  location are treated as messages to be sent to subscribers. See the protocol
  documentation for a detailed description.
 
== Message storage ==
 
push_store_messages [ on | off ]
  default: on
  context: http, server, location
  Whether or not message queuing is enabled. "Off" is equivalent to the setting
  push_channel_buffer_length 0;
 
push_max_reserved_memory [ size ]
  default: 32M
  context: http
  The size of the memory chunk this module will use for all message queuing
  and buffering.
 
push_min_message_buffer_length [ number ]
  default: 1
  context: http, server, location
  The minimum number of messages to store per channel. A channel's message
  buffer will retain at least this many most recent messages.
 
push_max_message_buffer_length [ number ]
  default: 10
  context: http, server, location
  The maximum number of messages to store per channel. A channel's message
  buffer will retain at most this many most recent messages.
 
push_message_buffer_length [ number ]
  default: none
  context: http, server, location
  The exact number of messages to store per channel. Sets both
  push_max_message_buffer_length and push_min_message_buffer_length to this
  value.
  
push_delete_oldest_received_message [ on | off ]
  default: off
  context: http, server, location
  When enabled, as soon as the oldest message in a channel's message queue has
  been received by a subscriber, it is deleted -- provided there are more than
  push_min_message_buffer_length messages in the channel's message buffer.
  Recommend avoiding this directive as it violates subscribers' assumptions of
  GET request idempotence.
 
push_message_timeout [ time ]
  default: 1h
  context: http, server, location
  The length of time a message may be queued before it is considered expired.
  If you do not want messages to expire, set this to 0. Applicable only if a
  push_publisher is present in this or a child context.
 
== Security ==
 
push_authorized_channels_only [ on | off ]
  default: off
  context: http, server, location
  Whether or not a subscriber may create a channel by making a request to a
  push_subscriber location. If set to on, a publisher must send a POST or PUT
  request before a subscriber can request messages on the channel. Otherwise,
  all subscriber requests to nonexistent channels will get a 403 Forbidden
  response.
 
push_channel_group [ string ]
  default: (none)
  context: server, location
  Because settings are bound to locations and not individual channels,
  it is useful to be able to have channels that can be reached only from some
  locations and never others. That's where this setting comes in. Think of it
  as a prefix string for the channel id.
 
push_max_channel_id_length [ number ]
  default: 512
  context: main, server, location
  Maximum permissible channel id length (number of characters).
  Longer ids will be truncated.
 
push_max_channel_subscribers [ number ]
  default: 0 (unlimited)
  context: main, server, location
  Maximum concurrent subscribers. Pretty self-explanatory.
 
--------------------------- Example Config -----------------------------------
http {
  #maximum amount of memory the push module is allowed to use
  #for buffering and stuff
  push_max_reserved_memory 12M; #default is 3M
 
  # internal publish endpoint (keep it private / protected)
  location /publish {
    set $push_channel_id $arg_channel; #/?channel=239aff3 or some-such
    push_publisher;
 
    push_message_timeout 2h; # expire buffered messages after 2 hours
    push_max_message_buffer_length 10; # store absolutely at most 10 messages
    push_min_message_recipients 0; # minimum recipients before purge
  }
 
  # public long-polling endpoint
  location /activity {
    push_subscriber;
 
    # how multiple subscriber requests to the same channel id are handled
    # - last: only the most recent subscriber request is kept, 409 for others.
    # - first: only the oldest subscriber request is kept, 409 for others.
    # - broadcast: any number of subscriber requests may be long-polling.
    push_subscriber_concurrency broadcast;
    set $push_channel_id $arg_channel; #/?channel=239aff3 or some-such
    default_type text/plain;
  }
}
 
---------------------------- Operation ---------------------------------------
The following describes what is likely to be the most commonly desired setup:
 
Assuming the example config given above,
Clients will connect to http://example.com/activity?id=... and have the
response delayed until a message is POSTed to http://example.com/publish?id=...
Messages can be sent to clients that have not yet connected, i.e. they are
queued.
 
Upon sending a request to a push_publisher location, the message, contained in
the publisher request body, will be sent to the channel identified by
$push_channel_id and to all presently connected channel subscribers. If there
are no subscribers waiting for a message at the time, the publisher will be
sent to with a with a 202 Accepted response. Otherwise, a 201 Created response
is sent. Additionally, the body of the publisher response will contain
information about the channel (number of current subscribers, message queue
length, etc).
 
If you intend to have the publisher be a server-side application, it's a damn
good idea to make sure the push_publisher location is not publicly accessible.
 
Traversal through a channel's message buffer by a subscriber requires proper
HTTP caching support from the subscriber client. Make sure it correctly sends
Last-Modified and Etag headers. (All modern web browsers do this.)
 
----------------------- Protocol Spec --------------------------------------
This module is unconditionally (fully) compliant with the Basic HTTP Push
Relay Protocol, Rev. 2.21, found in the file protocol.txt.
Blog | Support | Training | Contact | API | Status | Twitter | Help | Security
© 2010 GitHub Inc. All rights reserved. | Terms of Service | Privacy Policy
Powered by the Dedicated Servers and
Cloud Computing of Rackspace Hosting®
Dedicated Server