All Versions
90
Latest Version
Avg Release Cycle
36 days
Latest Release
-

Changelog History
Page 7

  • v1.7.0 Changes

    🚀 This release changes two important aspects of Centrifugo. We expect that it will be fully backwards compatible with previous one in most scenarios until you were using timestamp message field somehow.

    What's changed

    • integration with Gorilla Websocket PreparedMessage for raw websocket. We expect it to drastically improve websocket compression case - reducing both memory and CPU in large fan-out scenarios. This change does not affect SockJS in any way.
    • 👀 timestamp field removed from message. See #147 for motivation.
    • Several new memory metrics - node_memory_heap_sys, node_memory_heap_alloc, node_memory_stack_inuse
  • v1.6.5 Changes

    No backwards incompatible changes here.

    🔋 Features

    • ⬇️ resolve history_drop_inactive option edge case (described in #50)
    • two new options for autocert: ssl_autocert_force_rsa and ssl_autocert_server_name. See docs for description

    🛠 Fixes

    • ⚡️ update web interface - in new version we don't show connection endpoints on main page as we can't show them reliably. Final endpoints depend on your production proxy/firewall politics (and port configuration) so we don't try to guess.
  • v1.6.4 Changes

    No backwards incompatible changes here.

    We consider removing timestamp field from message as it's seems useless and never used by Centrifugo users. Applications that need timestamp for some reason can include it into message JSON payload. If you have any objections please look at issue #147 and write your thoughts against removing this field.

    🔋 Features

    • ⚡️ configurable websocket compression level - see updated docs. Bear in mind that compression is still very CPU and memory expensive
    • new metric node_uptime_seconds - see updated docs for stats

    🛠 Fixes

    • 🛠 fixes crash when using builtin TLS server - see #145
    • 🌲 redirect Go std lib logging into our INFO logger

    Internal (for developers/contributors)

    • 🏗 Using Go 1.7.5 for builds
    • 🚚 As soon as Go 1.8 out we will be able to remove x/net/http2 dependency as standard lib will contain fix for #145
  • v1.6.3 Changes

    🚀 This release fixes wrong decision made in 1.6.x related to pings. We don't rely on client to server 🚚 pings to disconnect clients anymore, we also moved back SockJS heartbeat frames - i.e. sending them from server to client every 25 seconds as before (in Centrifugo < 1.6.0). Recent changes in centrifuge-js (version 1.4.2) allowed us to not introduce addition reconnects for SockJS polling 📚 transports when sending client to server automatic ping. We also updated documentation chapter about pings a bit.

    🛠 Fixes

    • 0️⃣ Random disconnects from Centrifugo when using automatic client to server pings. This is a default 🛠 behaviour so it affects almost everyone who using Centrifugo 1.6.x, fixes https://github.com/centrifugal/centrifugo/issues/142
    • 🛠 Fix writing headers after headers already written in raw websocket endpoint - this remove annoying log line appearing after client can't upgrade connection to Websocket.
  • v1.6.2 Changes

    🔋 Features

    • 🐎 Use Redis pipelining and single connection for presence/history/channels operations. This increases performance of those operations especially on systems with many CPU cores.
    • 🍎 Homebrew formula to install Centrifugo on MacOS, see README for instructions.
    • 🐎 Update gorilla websocket library - there is one more update for websocket compression: pool flate readers which should increase compression performance.

    🛠 Fixes

    • 🛠 Fix calling presence remove for every channel (not only channels with presence option enabled).
    • 🔄 Change subscribing/unsubscribing algorithm to Redis channels - it fixes theoretical possibility of wrong subscribing state in Redis.

    Internal (for developers/contributors)

    • 👍 We don't use disconnect message before closing client connections anymore - we rely on websocket/SockJS close reason now (which is JSON encoded DisconnectAdvice). Our js client already handles that reason, so no breaking changes there. Some work required in other clients though to support reconnect: false in advice.
  • v1.6.1 Changes

    🚀 This release fixes some configuration problems introduced by v1.6.0 and adds Let's Encrypt support.

    🔋 Features

    • 📚 automatic TLS certificates from Let's Encrypt - see #133 and new dedicated documentation chapter
    • 🐎 websocket compression performance improvement (due to Gorilla Websocket library update)

    🛠 Fixes

    • 🛠 fix SSL/TLS certificates file option names - see #132
    • 🛠 fix web option that must enable admin socket automatically - see #136
  • v1.6.0 Changes

    🚀 This Centrifugo release is a massive 4-months refactoring of internals with the goal to separate code of different components such as engine, server, metrics, clients to own packages with well-defined API to communicate between them. The code layout changed dramatically. Look at libcentrifugo folder before and after! Unfortunately there are backwards incompatibilities with previous release - see notes below. The most significant one is changed metrics format in stats and node API command responses.

    With new code layout it's much more simple to create custom engines or servers – each with own metrics and configuration options. We can not guarantee though that we will keep libcentrifugo packages API stable – our primary goal is still building Centrifugo standalone server. So if we find something that must be fixed or improved internally - we will fix/improve it even if this could result in packages API changes.

    🏗 As Centrifugo written in Go the only performant way to write plugins is to import them in main.go file and build Centrifugo with them. So if you want to create custom build with custom server or custom engine you will need to change main.go file and build Centrifugo yourself. But at least it's easier than supporting full Centrifugo fork.

    🚀 Release highlights:

    • 🆕 New metrics. Several useful new metrics have been added. For example HTTP API and client request HDR histograms. See updated documentation for complete list. Refactoring resulted in backwards incompatible issue when working with Centrifugo metrics (see below). Here is a docs chapter about metrics.
    • Optimizations for client side ping, centrifuge-js now automatically sends periodic ping commands to server. Centrifugo checks client's last activity time and closes stale connections. Builtin SockJS server won't send heartbeat frames to SockJS clients by default. You can restore the old behaviour though: setting ping: false on client side and sockjs_heartbeat_delay: 25 option in Centrifugo configuration. This all means that you better update centrifuge-js client to latest version (1.4.0). Read more about pings in docs.
    • 🐎 Experimental websocket compression support for raw websockets - see #115. Read more details how to enable it in docs. Keep in mind that enabling websocket compression can result in slower Centrifugo performance - depending on your load this can be noticeable.
    • 🗄 Serious improvements in Redis API queue consuming. There was a bottleneck as we used BLPOP command to get every message from Redis which resulted in extra RTT. Now it's fixed and we can get several API messages from queue at once and process them. The format of Redis API queue changed - see new format description in docs. Actually it's now the same as single HTTP API command - so we believe you should be comfortable with it. Old format is still supported but DEPRECATED and will be removed in next releases.
    • 👀 Redis sharding support. See more details in docs. This resolves some fears about Redis being bottleneck on some large Centrifugo setups. Though we have not heard such stories yet. Redis is single-threaded server, it's insanely fast but if your Redis approaches 100% CPU usage then this sharding feature is what can help your application to scale.
    • Many minor internal improvements.

    🛠 Fixes:

    • 🚀 This release fixes crash when jsonp transport was used by SockJS client - this was fixed recently in sockjs-go library.
    • 🛠 Memory bursts fixed on node shutdown when we gracefully disconnect many connected clients.

    Backwards incompatible changes:

    • ⚡️ stats and node command response body format changed – metrics now represented as map containing string keys and integer values. So you may need to update your monitoring scripts.
    • 👀 Default log level now is info - debug level is too chatty for production logs as there are tons of API requests per second, tons of client connect/disconnect events. If you still want to see logs about all connections and API requests - set log_level option to debug.
    • channel_prefix option renamed to redis_prefix.
    • 🌐 web_password and web_secret option aliases not supported anymore. Use admin_password and admin_secret.
    • 🚚 insecure_web option removed – web interface now available without any password if insecure_admin option enabled. Of course in this case you should remember about protecting your admin endpoints with firewall rules. Btw we recommend to do this even if you are using admin password.
    • 🌐 Admin info response format changed a bit - but this most possibly will not affect anyone as it was mostly used by embedded web interface only.
    • Some internal undocumented options have been changed. Btw we documented several useful options which can be helpful in some cases.

    Several internal highlights (mostly for Go developers):

    • Code base is more simple and readable now.
    • Protobuf v3 for message schema (using gogoprotobuf library). proto2 and proto3 are wire compatible.
    • Client transport now abstracted away - so it would be much easier in future to add new transport in addition/replacement to Websocket/SockJS.
    • API abstracted away from protocol - it would be easier in future to add new API requests source.
    • 🐎 No performance penalty was introduced during this refactoring.
    • We process PUB/SUB messages in several goroutines, preserving message order.
    • 🌐 We use statik (https://github.com/rakyll/statik) to embed web interface now.
    • 🏗 go1.7.4 used for builds.
  • v1.5.1 Changes

    • 🛠 Fixes #94.
  • v1.5.0 Changes

    🚀 Some upgrade steps needed to migrate to this release, see below.

    This release is a major refactoring of Centrifugo internal engine. Centrifugo now uses protobuf format while transferring data between nodes and serializing history/presence data in Redis. We expect that all those changes should not affect your working application code though as new serialization format used you may need to run FLUSHDB command if using Redis engine to remove presence/history data encoded as JSON (if you don't use presence and history then no need to do this). If you have any problems with new serialization format used by Centrifugo internally – we can consider making old JSON encoding optional in future releases. Depending on how you use Centrifugo with Redis Engine those internal changes can result in nearly the same performance (if real-time content mostly generated by users online, so messages coming to Centrifugo have to be delivered to at least one client) or up to 2x API request speed up (if your real-time mostly generated by application backend itself so some messages published in channel with no active subscribers and there is no need to do JSON encoding work).

    • Using SockJS 1.1 by default (actually as by default we use jsdelivr.net CDN version it will be latest minor release - at moment of writing 1.1.1) – this means that you need to also upgrade SockJS on client side to the same version (because some iframe-based SockJS transports require exact version match on client and server). Note that you can set desired SockJS version used by Centrifugo server via sockjs_url option (which is now by default //cdn.jsdelivr.net/sockjs/1.1/sockjs.min.js). So if you don't want to upgrade SockJS on client side or just want to fix version used or use your own hosted SockJS library (which is good if you think about old browser support and don't want to be affected by minor SockJS library releases) - use that option.
    • 🏗 centrifugo version now shows Go language version used to build binary.
    • 🐎 Performance and memory allocation improvements.
  • v1.4.5 Changes

    🚀 No backwards incompatible changes here. This release uses go1.6.2

    • ⬆️ HTTP/2 support. This means that Centrifugo can utilize HTTP/2 protocol automatically - this is especially useful for HTTP-based SockJS transports (no limits for open connections per domain anymore). Note that HTTP/2 will work only when your setup utilizes https. Also HTTP/2 does not affect websockets because of missing protocol upgrade possibilities in HTTP/2 protocol - so websockets will work in the same way as before. Also if you have any proxy before Centrifugo then depending on your setup some reconfiguration may be required to make HTTP/2 work.

    ✅ Just to remember how to test Centrifugo with SSL: follow instructions from Heroku article to generate self-signed certificate files. Then start Centrifugo like this:

    ./centrifugo --config=config.json --web --ssl --ssl_key=server.key --ssl_cert=server.crt
    

    ✅ Go to https://localhost:8000/ and confirm that you trust certificate of this site (this is because of self-signed certificate, in case of valid certificate you don't need this step). Then you can test secure endpoint connections.