1.3.7 (Sep. 19 2024)
fix: repeated DELETE requests can leave unresponsive subscribers connected to a channel
fix: channel info subscriber count incorrect when using Redis following unclean worker exit
(Thanks, Steven Green)
feature: manually set Redis server roles to master or slave
fix: Redis server blacklist was only applied in cluster mode
(Thanks, piotr-lwks)
fix: Nchan may fail to connect to non-cluster Redis if more than 1 server is specified
(Thanks, Mike Baroukh)
fix: Some invalid message IDs may result in a worker crash
fix: Nchan may fail to reconnect ro a Redis cluster when using many workers due to a race condition
(Thanks, Fabio Urquiza)
fix: subscriber info may be incorrect for Redis version >=7
fix: Redis cluster may fail to reconnect to a cluster without consensus
(Thanks, Fabio Urquiza)
1.3.6 (Jan. 6 2023)
fix: reloading Nginx with nchan_stub_status enabled may result in a crash (introduced in v1.3.1)
fix: nchan_redis_upstream_stats_enabled incorrectly documented as having "yes/no" values instead of "on/off"
fix: compilation erros for Nginx 1.23.2
1.3.5 (Oct. 27 2022)
feature: track Redis upstreams statistics with nchan_redis_upstream_stats
fix: possible invalid memory access after Redis cluster node discovery
fix: GET publisher location request may return incorrect subscriber count when using Redis
fix: possible to log invalid string for rare error
1.3.4 (Sep. 1 2022)
fix: Redis cluster slave failover may result in crash
1.3.3 (Aug. 29 2022)
fix: incorrect timeout handling for new nchan_redis_accurate_subscriber_count resulted in inaccurate subscriber counts
1.3.2 (Aug. 23 2022)
feature: stub status now shows the total number of commands sent to Redis
fix: Redis cluster checks may not time out
fix: Redis cluster may not be marked unhealthy if a required node is marked in the node list as 'fail'
fix: simultaneous creating many Redis-backed channels may result in CPU usage spikes on Redis server
1.3.1 (Aug. 1 2022)
fix: Nchan may become unresponsive after a worker is uncleanly terminated
change: nchan_redis_optimize_setting is now obsolete
feature: nchan_redis_accurate_subscriber_count that doesn't corrupt Redis
subscriber counts when nginx workers are killed
feature: added "redis unhealthy upstreams" to nchan_stub_status
fix: incorrect nchan_stub_status variables after a worker is uncleanly terminated
fix: build errors with Nginx >= 1.20.1
feature: Redis >=7.0.1 SMESSAGE support
fix: Redis cluster slot assignments may not be reconfigured correctly
fix: discovery of Redis slave nodes in cluster may be incomplete
1.3.0 (May 26 2022)
feature: configurable Redis command timeouts with nchan_redis_command_timeout
feature: configurable Redis command retries with nchan_redis_retry_commands and nchan_redis_retry_commands_max_wait
fix: Redis cluster status checks can now discover new slaves
fix: Redis 7 cluster keyslot errors not recognized on Redis 7
feature: Redis 7 sharded pubsub support
feature: configurable Redis cluster recovery time, backoff, and jitter
feature: Redis cluster failure recovery without disconnection
feature: configurable Redis reconnection time, backoff, and jitter
fix: Redis scripts are now loaded only when missing
1.2.15 (Dec. 27 2021)
fix: publishing to >255 string-delimitered channels could result in a crash
fix: Redis connection failures (since 1 2.14)
1.2.14 [WITHDRAWN] (Dec. 20 2021)
fix: compiler warnings from the use of the 'typeof' macro
fix: Nchan can't be built without the Nginx SSL module (bug introduced in 1.2.13)
update: hiredis updated to 1.0.2
fix: some Redis connection failures could result in a crash (bug introduced in 1.2.13)
fix: upstream subrequests crashed with Nginx >= 1.19.9
1.2.13 [WITHDRAWN] (Dec. 13 2021)
feature: Redis ACL support with username and passwword
feature: Redis TLS support
1.2.12 (Sep. 22 2021)
fix: better Redis cluster connection logging
fix: redundant method to discover Redis slave nodes in cluster mode could result in receiving unreachable IPs
1.2.11 (Sep. 17 2021)
feature: nchan_redis_discovered_ip_range_blacklist for ignoring autotiscoreved nodes
feature: nchan_redis_storage_mode is now configurable in location contexts
1.2.10 (Aug. 25 2021)
fix: Nchan could not be built without openssl due to hiredis dependency
(introduced in v1.2.9)
feature: allow no separator for http-raw-stream (thanks @sclem)
1.2.9 (Aug. 12 2021)
feature: Redis cluster reconfiguration check timer,
nchan_redis_cluster_check_interval setting
fix: detect Redis cluster reconfiguration when publishing messages in "nostore" mode
update: hiredis updated to v1.0.0
fix: segfault on out-of-shared-memory condition for multiplexed publishers
1.2.8 (Apr. 12 2021)
feature: nchan_subscriber_info locations for receiving customizable info from
subscribers of a given channel.
fix: incorrect lgging of disconnected subscribers with 400 error instead of 499
(bug introduced in v1.2.7)
feature: add $nchan_channel_subscriber_last_seen, $nchan_channel_subscriber_count
and $nchan_channel_message_count variables
fix: GCC 10 compatibility
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