forked from slact/nchan
-
Notifications
You must be signed in to change notification settings - Fork 0
/
changelog.txt
505 lines (505 loc) · 28.9 KB
/
changelog.txt
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
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
1.2.7 (Mar. 17 2020)
fix: unidirectional subscribers have their connection terminated if they send any data to the server
after the initial request handshake. This applies to all subscribers except Websocket
feature: periodic pings for EventSource subscribers
fix: Redis pending commands count may be incorrect in nchan's stub status page
fix: channel deletion fails to propagate to Redis slaves
fix: possible stack overflow when using websocket subscribers
1.2.6 (Jun. 18 2019)
fix: when using Redis, a channel can stop receiving new messages if
they are published faster than they can be sent to subscribers and the
message buffer is sufficiently small
fix: websocket PONG response did not contain PING frame data
fix: multiplexed channels may stop receiving messages
fix (security): specially crafted websocket publisher requests when using Redis
may result in use-after-free memory access
fix: Nginx config reload may result in crash when using Redis cluster
1.2.5 (Mar. 20 2019)
fix: using multiplexed channels with Redis in backup mode may result in worker crash
fix: nchan_publisher_channel_id could not be set exclusively in a publisher location
fix: Google pagespeed module compatibility
fix: nchan prevents nginx from starting if no http {} block is configured
1.2.4 (Feb. 25 2019)
fix: Redis cluster info with zero-length hostname may result in worker crash
fix: build problems with included hiredis lib in FreeBSD
feature: nchan_redis_namespace and nchan_redis_ping_interval now work in upstream blocks
fix: websocket publisher did not publishing channel events
fix: Redis namespace was limited to 8 bytes
1.2.3 (Oct. 15 2018)
fix: possible invalid memory access when the initial connection to a Redis cluster node times out
1.2.2 (Oct. 9 2018)
fix (security): using an unresponsive, overloaded Redis server may result in invalid memory access
fix: incorrect logging of discovered Redis cluster nodes
fix: better handling of connection loss when Redis server is unresponsive
fix: presence of Redis cluster nodes with no known address ("noaddr") nodes could result in worker crash
fix (security): subscriber may erroneously receive a 400 Bad Request or crash a worker
based on data from a previous subscriber
feature: built-in backend benchmark
feature: add optimized fastpublish option to Redis nostore mode for maximum
message publishing thoroughput via Redis
feature: add no-store Redis mode that uses Redis for broadcasting messages, not storage
fix: connecting to load-balancing Redis proxy resulted in crash
fix: using longpoll-multipart in "raw" mode cound result in worker crash
fix: channel events used with Redis resulted in segfault
1.2.1 (Aug. 2 2018)
fix: channel last_requested was set to 0 instead of -1 on channel creation
fix: authentication failure body not forwarded for Nginx > 1.13.10
fix: possible invalid memory access for websocket unsubscribe requests
fix: building Nchan could interfere with building other modules
1.2.0 (Jul. 23 2018)
feature: configurable support for CORS Access-Control-Allow-Credentials header
fix: better compliance with RFC7692 Websocket permessage-deflate parameter negotiation
fix (security): possible busy-loop denial-of-service for specially crafted
handshakes from Websocket subscribers using permessage-deflate
(Thanks, Benjamin Michéle)
fix: nchan_permessage_deflate_compression_memlevel was not applied when set
refactor: all publisher and subscriber upstream requests are now more memory-efficient
fix: Using websocket publisher upstream requests may result in invalid memory access
fix: publishing Redis-backed messages with 1-second expiration may fail after
cluster restart
change: nchan_redis_wait_after_connecting directive is now obsolete, and is ignored
feature: nchan_redis_optimize_target for "cpu" or "bandwidth". Trades off CPU
load on Redis slaves for syncronization bandwidth.
feature: configurable Redis master/slave channel subscribe weights with
nchan_redis_subscribe_weights
fix: Compilation issues on OS X and systems lacking non-POSIX memrchr()
fix: nchan_pubsub CORS Allowed headers did not include headers used by subscribers
fix: Redis-backed channel buffer length could exceed nchan_message_buffer_length
fix: Publisher upstream compatibility for Nginx > 1.13.10
feature: nchan_redis_connect_timeout to configure maximum connection time
to Redis servers
feature: Offload Redis SUBSCRIBE traffic to slaves
(one SUBSCRIBE per channel per worker)
fix: Redis cluster and master/slave failover and reconnection issues
refactor: Redis connection handling rewritten from scratch
fix: subscribers may not receive new messages after reconnecting to Redis
fix: publishing to an unavailable Redis-backed channel may result in a
following 400 Bad Request
change: Old Redis-backed channel messages are now delivered after the message
buffer is fully loaded into memory. Previously they were delivered
incrementally while the buffer loaded.
fix: multiplexed Redis-backed channels may not deliver messages if one or
more channels' messages all expire
fix: possible crash when catching up to reconnected Redis channel with
subscribers waiting for consecutive messages
fix: possible crash from rapidly creating and deleting channels
1.1.15 (Apr. 27 2018)
fix: A disconnect from a Redis cluster node can result in a segfault
fix: Using Redis-backed multiplexed channels can result in a segfault
1.1.14 (Jan. 10 2018)
feature: added nchan_redis_wait_after_connecting setting
fix: compatibility with Redis >= 4.0 cluster
1.1.13 (Dec. 4 2017)
fix: added Redis backwards compatibility with Nchan 1.1.7 and below
for online upgrades with mixed-version Nchan cluster
1.1.12 (Dec. 1 2017)
fix: possible "Unexpected spool == nuspool" worker crash
fix: subscriber messages delivered during active nchan_subscribe subrequest
may be garbled
1.1.11 (Nov. 29 2017)
fix: Redis backup-mode not working (since 1.1.9)
fix: incorrect handling of Redis permessage-deflated messages results in
missing first char of eventsource event type
fix: worker crash when unable to create temp file for large websocket
permessage-deflate message
fix: CPU-bound overloaded Nginx may result in worker crashes
(may occur with large Openresty Lua load)
change: default nchan_shared_memory_size is now 128M
fix: some channel info from publisher GET requests may be incorrect with Redis
fix: file descriptor leak when reconnecting to Redis
1.1.10 (Nov. 13 2017)
feature: nchan_authorize_request failure response forwarded back to subscriber
Sponsored by Symless (https://symless.com/)
fix: allow nchan_access_control_allow_origin in if blocks
fix: longpoll-multipart may read uninitialized memory when receiving
zero-length message
fix (security): invalid memory access for aborted websocket subscriber
after channel existence check via Redis
fix: websocket handhshake failure handled incorrectly when messages
are available
fix (security): websocket subscriber disconnecting before handshake may
result in invalid memory access
fix (security): possible invalid memory access for disappearing longpoll sub
feature: add "shared memory limit" to nchan_stub_status output
1.1.9 (Oct. 30 2017)
fix: more proper websocket extension negotiation with more
informative failure messages
fix: websocket handshake failure response included superfluous CLOSE frame
feature: websocket deflate-frame and x-webkit-deflate-frame support
1.1.8 (Oct. 26 2017)
feature: websocket permessage-deflate support
Sponsored by HYFN (https://hyfn.com/)
fix (security): websocket publisher may crash worker when publishing with
channel group accounting on to a new group
fix: messages published to Nchan via websocket binary frames
should have content-type set to "application/octet-stream"
fix: accept websocket publisher binary frames (thanks @rponczkowski)
fix: multiplexing over exactly 255 channels results in worker crash
fix (security): Specially crafted invalid subscriber msgid may crash worker
fix: nchan_subscriber_first_message <= 0 (newest) with existing Redis data
incorrectly treated as "oldest" for initial subscribers
fix: 0-length channel name may crash worker
fix: subscribe/unsubscribe callback requests do not work when used with
authorization callback request
fix (security): Messages published with Redis through websocket publisher
may result in worker crash (bug introduced in 1.1.5)
fix: nchan_pubsub setting may not be parsed correctly
1.1.7 (Jul. 3 2017)
fix: possible read-after-free after redis disconnect
fix: publishing to redis cluster before it is connected results in worker crash
fix: possible use-after-free for suddenly disconnected longpoll-multipart subscriber
fix: possible use-after-free when using nchan_authorize_request for slow subscribers and slow upstream
fix: nchan_stub_status "stored messages" value could be incorrect when using Redis
1.1.6 (May 9 2017)
fix: messages published through Redis may crash worker (introduced in 1.1.5)
fix (security): urlencoded message id in url parsed incorrectly can result in worker crash
1.1.5 (May 3 2017)
feature: get current Nchan version through $nchan_version variable
and nchan_stub_status
fix (security): invalid memory access for multiplexed channel subscribers
with buffered output (Thanks Casey Forbes (@caseyf) for debugging.)
fix: "redis pending commands" nchan_stub_status stat could be wrong after
deleting channels
fix: invalid memory access when using Redis under high load
fix: possible "message from the past" errors under high publishing load
fix: graceful publisher/subscriber notifications when out of shared memory
(via HTTP 507 Insufficient Storage status code)
fix: compatibility with limit_except directive
1.1.4 (Apr. 25 2017)
fix (security): possible memory corruption using multiplexed channels
at high load (Thanks Giovanni Caporaletti (@TrustNoOne) for debugging.)
fix: possible crash when reconnecting to Redis cluster (introduced in 1.1.3)
1.1.3 (Mar. 25 2017)
fix (security): incorrect handling of WS optimization could trigger SIGABRT
fix: Redis cluster reconnect readiness verification
1.1.2 (Mar. 1 2017)
change: "interprocess alert X delayed by Y sec" log messages downgraded
from ERROR to NOTICE
fix: "group info string too short" error
fix: Incorrect handling of connections to Redis cluster nodes with round-robin
DNS hostnames (Thanks to ring.com for sponsoring this fix!)
1.1.1 (Feb. 8 2017)
fix: incorrect stats for nchan_stub_status after reload.
(Stats are no longer reset after reload)
fix: websocket subscriber may receive two CLOSE frames
fix: websocket with ws+meta.nchan subprotocol did not receive empty messages
feature: websocket client heartbeats with nchan_websocket_client_heartbeat
fix: websocket now echoes code and reason when connection close initiated from client
1.1.0 (Jan. 4 2017)
feature: websocket subscribers now receive "application/octet-stream" messages
in binary frame rather than text
fix: publisher request variables not always passed to nchan_publisher_upstream_request
feature: Redis storage 'backup' mode strictly for data persistence
fix: possible lingering subscriber if connection is closed just before subscribing
fix: possible memory leak when using multiplexed channels
security fix: subscribing with If-Modified-Since and without If-None-Match headers
crashed the Nginx worker (thanks @supertong)
security fix: sending an empty message to multipart/mixed subscriber crashed Nginx worker
fix: publisher & subscriber response codes were logged incorrectly
fix: websocket subscriber memory leak on upstream authentication failure
fix: possible crash after reloading when using several instances of Nchan with Redis
feature: nchan_access_control_allow_origin can accept nginx variables
feature: Redis key namespaces
feature: all size configurations can now parse decimal values
fix: off-by-one subscriber count when using multiplexed channels
feature: accounting and dynamic limits for channel groups
1.0.8 (Nov. 28 2016)
fix: possible crash under severely heavy load, introduced in 1.0.7 with stack-overflow fix
1.0.7 (Nov. 27 2016)
fix: memory leak after websocket publisher uncleanly aborts connection
fix: misbehaving websocket publisher with nchan_publisher_upstream_request
fix: potential stack overflow with very large message buffers
fix: invalid memory access with empty nchan_publisher_upstream_request for websocket publisher
fix: incorrect handling of chunked response from nchan_publisher_upstream_request
fix: publishing through websocket too fast may result in buffered messages that never arrive
fix: DELETE to multiplexed channel should delete all listed channels
fix: abort if publishing to multiple channels while using redis
1.0.6 (Nov. 15 2016)
fix: large messages were sometimes incorrectly cleaned up, leaving behind temp files
fix: file descriptor leak when listening on a unix socket and suddenly
aborting client connections
fix: invalid memory access after reloading twice with redis enabled
fix: crash after shutting down nginx when 'master_process' set to 'off'
change: nchan_max_channel_subscribers now always refers to subscribers on this instance of
Nchan, even when using Redis.
feature: subscribe/unsubscribe callbacks with nchan_subscribe_request and nchan_unsubscribe_request
1.0.4 (Oct. 28 2016)
security: fix crash when receiving large messages over websocket with ws+nchan subprotocol
1.0.3 (Sept. 3 2016)
feature: nchan_message_timeout and nchan_message_buffer_length
can now use nginx variables for dynamic values
fix: unsolicited websocket PONGs disconnected the subscriber in violation of RFC6455
fix: possible script error when getting channel from Redis
fix: possible incorrect message IDs when using Redis (thanks @supertong)
security: possible invalid memory access on publisher GET, POST, or DELETE when
using Redis and the publisher connection is terminated before receiving
a response
fix: correct publisher response code when nchan_authorize_request is unavailable
(502 instead of 500)
security: crash if publisher POSTs request with no Content-Length header when
using nchan_authorize_request
1.0.2 (Aug. 29 2016)
fix: more informative missed-message warnings
fix: invalid memory access when Redis enabled without setting server URL
fix: incomplete redis channel deletion
fix: Redis command responses may not be processed after large message
until next command
feature: catch up with missed messages after reconnecting to Redis cluster
fix: possible invalid memory access after disconnecting from Redis cluster
fix: Redis-stored unbuffered messages may not be delivered
fix: possible invalid memory access when using previously idling channels
fix: invalid memory access if publisher POST request's connection terminates
before receiving response
fix: messages published rapidly to Redis via different Ncnan servers may
be received out of order
fix: possible stack overflow when receiving messages through Redis
for multiplexed channels
fix: channels with 'nchan_store_messages off' published 1 message per second
fix: issue warning when out-of-order published message is detected
fix: Redis cluster compatibility with channel ids containing '}' character
fix: Redis-stored channel deleted too quickly when publishing short-lived messages
1.0.1 (Aug. 22 2016)
feature: nchan_stub_status shared memory accounting
fix: various compiler warnings
1.0.0 (Aug. 20 2016)
fix: incorrectly repeated subscriber_enqueue channel events
fix: badly handled Redis messages with TTL < 1 (again)
fix: websocket didn't close connection on PING fail
feature: nchan_stub_status stats location
fix: bad memory access for Redis channels when unsubscribing and very busy
optimize: SSE2 & AVX2 optimizations for websocket frame unmasking
feature: Redis Cluster support
(WARNING:) data in Redis from previous versions will be inaccessible
feature: different locations can use different Redis servers
feature: nchan_subscriber_first_message can take a number (positive or negative)
for nth message (from first or last)
feature: expire Redis-stored idle channels with nchan_redis_idle_channel_cache_timeout
fix: some multiplexed channels never garbage-collected when inactive
fix: unbuffered message garbage collector was too lazy
fix: update nchan_message_buffer_length correctly when using Redis (thanks @supertong)
fix: incorrect handling of missing/expired messages in multiplexed channels
fix: memory leak when publishing via Websocket on a pubsub location
fix: multiplexed channel DELETE when using Redis handled incorrectly
fix: rare Redis script error when publishing message
fix: Redis connection ping infinite loop when reloading
fix: crash if Redis message TTL less than 1 sec
fix: message delivery occasionally stopped when using Redis
and rapidly publishing messages
fix: logpoll-multipart sometimes failed to respond when using Redis
and rapidly publishing messages
fix: don't crash if Redis server is busy loading data
0.99.16 (Jun 10 2016)
fix: invalid memory access when upstream subscriber authorize request failed
fix: longpoll-multipart subscriber was managed incorrectly on channel deletion
fix: subscribers may not receive messages after Redis reconnection
0.99.15 (May 31 2016)
feature: Redis client keepalive configurable with nchan_redis_ping_interval
feature: try to reconnect to Redis after lost connection to Redis
fix: invalid memory access after lost connection to Redis
fix: use-after-free error if subscriber disconnects before response
from upstream authorize server (thanks Filip Jenicek)
fix: corrupt longpoll-multipart boundary data with long messages
feature: 'raw' mode for longpoll-multipart
feature: http-raw-stream client, like Push Stream Module's 'stream' mode
fix: incomplete longpoll-multipart response when using Redis
fix: "subrequests cycle" error for websocket publisher for nginx > 1.9.4
fix: nchan_channel_id_split_delimiter inheritance
fix: subscriber memory leak from 0.99.8
fix: reload crash from 0.99.14
0.99.14 (May 4 2016)
fix: trailing NULL character in Publisher response content-type for json, xml, and yaml
fix: don't crash when out of shared memory
fix: invalid memory access when using nchan_publisher_upstream_request with websocket
fix: incorrect stored messages count when using Redis store
fix: incorrect last_message_id on publisher GETs (memstore and Redis)
fix: incorrect behavior when subscribing right after startup before all workers are ready
fix: some internal event loop timers were not being canceled, leading to slow shutdown
fix: resuming some subscribers with valid message ids didn't work when using Redis store
fix: possible invalid memory access when restarting Nginx after using multiplexed channels
fix: accept url-encoded message ids
feature: add ws+meta.nchan websocket subprotocol that include message metadata
fix: all requests after X-Accel-Redirect from upstream were treated as GETs
0.99.13 (Apr. 20 2016)
fix: invalid content-length for nchan_authorize_request publisher requests
fix: "subrequests cycle" error after 200 websocket publish requests
fix: zero-size buf warning when publishing empty messages via websocket
fix: nchan_max_channel_subscribers was ignored
fix: use a blocking Redis connection for commands during shutdown to ensure commands are sent
fix: better TTL handling for Redis keys
0.99.12 (Apr. 10 2016)
fix: SPDY compatibility with EventSource and multipart/mixed subscribers
fix: warnings when shutting down Redis storage
feature: use system's hiredis library if present
fix: incorrect handling of missing messages when publishing to Redis
0.99.11 (Apr. 3 2016)
feature: nchan can be built as a dynamic module (for nginx >= 1.9.11)
0.99.10 (Apr. 2 2016)
fix: messages not freed until expired after being deleted from channel
fix: buffering and output issues for large messages
update: hiredis updated to v0.13.3
fix: Redis publishing and subscribing memory leaks
optimize: per-channel Redis subscriber counts batched into 100-ms intervals
to prevent Redis roundtrip floods
fix: Redis subscriber memory leak
refactor: extracted shared subscriber and message store logic
fix: use-after-free error for Redis channels without subscribers
fix: channel readying logic sometimes got confused and tripped up assert()s
fix: even more proper handling of websocket close frames
change: 408 Request Timeout instead of 304 No Content status code for timed out subscribers
0.99.8 (Mar. 13 2016)
fix: multipart/mixed subscriber output issues
fix: memory leak for multiplexed > 4 channels
fix: invalid memory access for aborted subscriber connection with Redis
and nchan_subscribe_existing_channels_only
fix: accept websocket binary data frames
fix: proper handling of websocket close frames
fix: incorrect expire calculation for cached Redis-stored messages
fix: double free for multiplexed >4 websocket subs
0.99.7 (Mar. 10 2016)
fix: websocket infinite ping loop after reload
feature: nchan_subscriber_message_id_custom_etag_header for misbehaving proxies that eat etags
fix: 100% cpu after lost Redis connection
fix: refined CORS cross-origin access control headers and logic
fix: longpoll subscriber in multipart mode didn't output all messages
fix: longpoll subscriber in multipart mode could access invalid memory
fix: compatibility with supported Redis versions < 2.8.14
fix: nchan_message_timeout 0 should not expire messages
0.99.6 (Feb. 22 2016)
fix: SIGHUP reloading under load
0.99.5 (Feb 15 2016)
fix: publishing with client_body_in_file_only enabled
0.99.4 (Feb 12 2016)
fix: invalid memory access in channel DELETE response
fix: race condition in IPC during channel creation (thanks vtslothy)
0.99.3 (Feb 10 2016)
fix: SIGHUP reloading
fix: startup with insufficient file descriptors shouldn't crash
fix: longpoll-multipart failure to immediately respond
fix: longpoll-multipart abort handling
fix: Redis-store cached message timeouts
fix: Redis connection-lost handling
fix: startup with 'master_process off' (single-process mode)
feature: EventSource 'event:' line support with custom header or config
0.98 (Jan 21 2016)
feature: publish to multiple channels with one request
feature: nchan_longpoll_multipart_response config setting
fix: large message (in-file) handling for multipart/mixed and chunked subscribers
fix: 400 Bad Request error on 32-bit systems
fix: memory allocation error for >8 multi-channel subscribers
0.97 (Jan 5 2016)
fix: build issues with debian
fix: compatibility with nginx versions down to 1.0.15
fix: publishing bug introduced in 0.96
0.961 (Jan 4 2016)
fix: compiler warning
0.96 (Jan 1. 2016)
feature: websocket ping with nchan_websocket_ping_interval
fix: unsafe memory access for Redis publisher
feature: nchan_publisher_upstream_request
fix: http/2 compatibility for EventSource and multipart/mixed
fix: nchan_authorize_request for publisher location endpoints
fix: publishing long (stored in file) messages to Redis-store
0.95 (Dec. 24 2015)
feature: configurable nchan_access_control_origin_header, default to *
fix: recognize non-preflighted CORS requests
fix: Redis invalid memory access after timeout
0.94 (Dec. 22 2015)
feature: last mesage id in channel info response
feature: subscribe up to 255 channel ids using nchan_channel_id_split_delimiter
fix: tried connecting to Redis when not needed
change: "last requested" no longer has a -1 value for 'never requested'.
fix: "last requested" in channel info sometimes not updated
fix: deleting empty channels
change: more compact message ids
0.931 (Dec. 14 2015)
optimize: inter-process internal subscriber fetched too many messages
0.93 (Dec. 12 2015)
feature: optionally only use Etag for subscriber message id
feature: optionally get requested message id from variable config
0.92 (Dec. 11 2015)
feature: HTTP multipart/mixed subscriber
fix: EventSource bad memory access on disconnect
feature: HTTP chunked encoding subscriber
fix: resolved some strict compiler warnings
fix: more stringent out-of-memory detection during response output. thanks @woodyhymns
fix: less-than-optimal cache filename handling. thanks @ZhouBox
fix: incorrect EventSource charset in header. thanks @eschultz
fix: segfault when websocket publishes message and immediately disconnects
fix: Duplicate "Connection: Upgrade" header for websocket handshake. thanks @eschultz
0.904 (Dec. 7 2015)
fix: more flexible Websocket handshake for "Connection" header. thanks @eschultz
fix: out-of-memory safety check. thanks @woodyhymns
0.903 (Dec 3 2015)
fix: better Redis engine connection initializer
change: simpler message buffer settings
fix: more backwards-compatibility for pushmodule config settings
0.9 (Dec. 2 2015) - first beta pre-release tag after rebranding as Nchan
feature: meta channel events: track when subscribers connect and disconnect, and when messages are
published, with configurable event strings
feature: request authorization: send upstream request before publishing or subscribing.
works just like the auth_request module.
feature: channel multiplexing. up to 4 channels can be subscribed to from a single location
fix: channel ids were not set within if statements in the nginx config
feature: hybrid memstore + Redis storage. local caching + distributed message publishing, the best
of both worlds. (still slower than pure memstore though)
feature: pubsub locations, optional separate publisher and subscriber channel ids per location
feature: websocket publisher support
name change: we're nchan now. code renamed, and cleaned up. config options are backwards-compatible.
feature: websocket subscriber support
huge refactor: completely new in-memory storage engine. No more global lock.
Actually, no more locks at all!
feature: Redis storage engine.
0.73 (Sep. 2 2014)
fix: turning on gzip cleared Etag subscriber response header
fix: channels incorrectly deleted when overwhelmed with connections
feature: CORS support via OPTIONS request method response
fix: file descriptor leak when restarting nginx via SIGHUP
improve: concurrency for interprocess notifications
refactor: completely encapsulated message store
fix: slow memory leak introduced in 0.7
fix: memory leak when not using message buffer
0.712 (Mar. 21 2014)
fix: intermittently dropped long-polling connections on internal redirects
fix: unable to proxy long-polling subscribers. (thanks wandenberg and sanmai)
0.711 (Mar. 13 2014)
fix: incompatibility with cache manager (proxy_cache and fastcgi_cache directives)
0.71 (Mar. 1 2014)
fix: removed unused variables and functions to quiet down GCC
0.7: (Feb. 20 2014)
fix: last-in concurrency setting wasn't working reliably
refactor: partially separated message storage. add a test harness.
fix: segfault from concurrency bug while garbage-collecting channels
fix: some large messages got lost
0.692 (Feb. 3 2010)
fix: error log reported failed close() for some publisher requests with large messages
fix: occasional memory leak during message deletion
fix: worker messages intended for dead worker processes were not deleted
0.691 (Feb. 2 2010)
fix: server reload (via SIGHUP signal) was failing
fix: segfault on messages longer than client_body_buffer_size (thanks wfelipe)
change: removed push_min_message_recipients, added push_delete_oldest_received_message
0.69 (Nov. 17 2009)
fix: publisher got a 201 Created response even if the channel had no subscribers at the time (should be 202 Accepted)
fix: small memory leak after each message broadcast to a channel
feature: optional push_max_channel_subscribers setting added
fix: first-in concurrency setting wasn't responding to subscribers with a correct status code on conflict
fix: reused subscriber connections sometimes failed to receive messages
unfeature: no more nginx 0.6 support. not worth the hassle.
0.683 (Nov. 10 2009)
change: default max. reserved memory size changed form 16MB to 32 MB
change: unused node garbage collection made a little more aggressive (max. 3 unused channels per channel search instead of 1)
fix: unused nodes were deleted only on channel id hash collision (very rare)
fix: segmentation fault from allocating insufficient memory for interprocess messaging
0.681 (Nov. 6 2009)
feature: added push_message_buffer_length setting, which sets push_message_max_buffer_length and push_message_min_buffer_length at once.
fix: publisher channel info text/json response now uses double quotes instead of single.
fix: interprocess messages were not removed from shared memory correctly, causing weird errors
0.68 (Nov. 5 2009)
change: default push_subscriber_concurrency value is now "broadcast"
fix: incorrect error messages for invalid push_pubscriber and push_subscriber_concurrency settings
change: removed deprecated push_buffer_size and push_queue_messages settings
feature: rudimentary content-type negotiation for publisher channel info response.
support text/plain, text/json, text/yaml and application/xml (and mimetype equivalents)
fix: publisher GET response has HTTP status 0
0.67beta (Nov. 4 2009) and older
see git repository