Releases: centrifugal/centrifugo
v3.2.0
Centrifugo is a language-agnostic real-time messaging server. It handles persistent connections from application users (established over WebSocket, HTTP-streaming, SSE/EventSource, GRPC, SockJS transports) and provides API to publish messages to online users in real-time. Centrifugo scales well to load-balance client connections over a cluster of Centrifugo nodes. Chats, live comments, multiplayer games, streaming metrics can be built on top of Centrifugo messaging system. See Centrifugo docs for more information.
Release notes
This release contains backwards incompatible changes in experimental Tarantool engine (see details below).
Improvements
- Support checking
aud
andiss
JWT claims #496. See more details in docs: aud, iss. - Channel Publication now has
tags
field (map[string]string
) – this is a map with arbitrary keys and values which travels with publications. It may help to put some useful info into publication without modifying payload. It can also help to avoid processing payload in some scenarios. Publish and broadcast server APIs got support for settingtags
. Though supporting this field throughout our ecosystem (for example expose it in all our client SDKs) may take some time. Server API docs for publish and broadcast commands have been updated. - Support setting user for Redis ACL-based auth, for Redis itself and for Sentinel. See in docs.
- Unidirectional transports now return a per-connection generated
session
unique string. This unique string attached to a connection on start, in addition to client ID. It allows controlling unidirectional connections using server API. Previously we suggested using client ID for this – but turns out it's not really a working approach since client ID can be exposed to other users in Publications, presence, join/leave messages. So backend can not distinguish whether user passed its own client ID or not. Withsession
which is not shared at all things work in a more secure manner. Server API docs for subscribe, unsubscribe, disconnect and refresh commands have been updated. Below you can find a video where we have two clients connected over unidirectional HTTP-streaming and we are usingdisconnect
API to disconnect one of them bysession
. - Report line and column for JSON config file syntax error – see #497
- Improve performance (less memory allocations) in message broadcast, during WebSocket initial connect and during disconnect.
Breaking changes
- Breaking change in experimental Tarantool integration. In Centrifugo v3.2.0 we updated code to work with a new version of tarantool-centrifuge.
tarantool-centrifuge
v0.2.0 has an updated space schema. This means that Centrifugo v3.2.0 will only work withtarantool-centrifuge
>= v0.2.0 or rotor >= v0.2.0. We do not provide any migration plan for this update – spaces in Tarantool must be created from scratch. We continue considering Tarantool integration experimental.
Misc
- This release is built with Go 1.17.9.
- We continue working on client protocol v2. Centrifugo v3.2.0 includes more parts of it and includes experimental bidirectional emulation support. More details in #515.
- Check out our progress regarding Centrifugo v4 in #500.
- New community-driven Centrifugo server API library Centrifugo.AspNetCore for ASP.NET Core released.
session.mp4
v3.1.1
Centrifugo is an open-source scalable real-time messaging server in a language-agnostic way. It can be a missing piece in your application infrastructure for introducing real-time features. Think chats, live comments, multiplayer games, streaming metrics – you'll be able to build amazing web and mobile real-time apps with a help of Centrifugo. Choose the approach you like:
- bidirectional communication over WebSocket or SockJS
- or unidirectional communication over WebSocket, EventSource (Server-Sent Events), HTTP-streaming, GRPC
- or... combine both!
See centrifugal.dev for more information.
Release notes
No backwards incompatible changes here.
Improvements:
- Massive JSON client protocol performance improvements in decoding multiple commands in a single frame. See #215 for details.
- General JSON client protocol performance improvements for unmarshalling messages (~8-10% according to #215)
- Subscribe proxy can now proxy custom
data
from a client passed in a subscribe command.
This release is built with Go 1.17.4.
Docker images
docker pull centrifugo/centrifugo:v3.1.1
docker pull centrifugo/centrifugo:v3
docker pull centrifugo/centrifugo:v3.1
v3.1.0
No backwards incompatible changes here.
Improvements:
- Introducing a granular proxy mode for a fine-grained proxy configuration. Some background can be found in #477.
Also check out new tutorials in our blog (both examples can be run with single docker compose up
command):
- Centrifugo integration with NodeJS tutorial
- Centrifugo integration with Django – building a basic chat application
Centrifugo dashboard for Grafana was updated and now uses $__rate_interval function of Grafana.
This release is built with Go 1.17.3.
Docker images
docker pull centrifugo/centrifugo:v3.1.0
docker pull centrifugo/centrifugo:v3
docker pull centrifugo/centrifugo:v3.1
v3.0.5
No backwards incompatible changes here.
Fixes:
- Fix subscription cleanup on client close. Addresses one more problem found in this report.
Docker images
docker pull centrifugo/centrifugo:v3.0.5
docker pull centrifugo/centrifugo:v3
docker pull centrifugo/centrifugo:v3.0
v3.0.4
No backwards incompatible changes here.
Fixes:
- Fix deadlock during PUB/SUB sync in channels with recovery. Addresses this report. Can help if you observe wrong number of client connections (large than it should).
- Fix
redis_db
option: was ignored previously – #487.
Docker images
docker pull centrifugo/centrifugo:v3.0.4
docker pull centrifugo/centrifugo:v3
docker pull centrifugo/centrifugo:v3.0
v3.0.3
No backwards incompatible changes here.
Fixes:
- Fix passing
data
from subscribe proxy result towards client connection.
This release is built with Go 1.17.2.
Docker images
docker pull centrifugo/centrifugo:v3.0.3
docker pull centrifugo/centrifugo:v3
docker pull centrifugo/centrifugo:v3.0
v3.0.2
No backwards incompatible changes here.
Fixes:
- Fix SockJS data escaping on EventSource fallback. See igm/sockjs-go#100 for more information. In short – this bug could prevent a message with
%
symbol inside be properly parsed by a SockJS Javascript client – thus not processed by a frontend at all. - Fix panic on concurrent subscribe to the same channel with recovery feature on and
client_concurrency
> 1. More details in centrifugal/centrifuge#207
Docker images
docker pull centrifugo/centrifugo:v3.0.2
docker pull centrifugo/centrifugo:v3
docker pull centrifugo/centrifugo:v3.0
v3.0.1
No backwards incompatible changes here.
Fixes:
- Fix proxy behavior for disconnected clients, should be now consistent between HTTP and GRPC proxy types.
- Fix
bufio: buffer full
error when unmarshalling large client protocol JSON messages. - Fix
unexpected end of JSON input
errors in Javascript client with Centrifugo v3.0.0 when publishing formatted JSON (with new lines).
This release uses Go 1.17.1. We also added more tests for proxy package, thanks to @silischev.
Docker images
docker pull centrifugo/centrifugo:v3.0.1
docker pull centrifugo/centrifugo:v3
docker pull centrifugo/centrifugo:v3.0
v3.0.0
Centrifugo is a scalable real-time messaging server in a language-agnostic way.
Centrifugo v3 release is targeting to improve Centrifugo adoption for basic real-time application cases, improves server performance and extends existing features with new functionality. It comes with unidirectional real-time transports, protocol speedups, super-fast engine implementation based on Tarantool, new documentation site (centrifugal.dev), GRPC proxy, API extensions and PRO version which provides unique possibilities for business adopters.
Centrifugo v3 introductory blog post describes the most notable aspects of v3.
The release has backward incompatible changes. Centrifugo v3 migration guide aims to help with v2 to v3 migration. Migration guide contains a best-effort configuration converter to adapt the existing configuration file for v3.
Release summary:
- License changed from MIT to Apache 2.0.
- Support for unidirectional transports (Eventsource, GRPC, HTTP-streaming, WebSocket). Docs and introductory blog post provide more information.
- Better performance:
- Drastically improved JSON client protocol performance, addresses #460
- Sharded in-memory connections hub to reduce lock contention
- Less memory allocations during message broadcast
- 5% overall additional performance boost due to using Go 1.17
- More details in the introductory blog post
- Enhanced client history API (iteration support, docs), breaking change in client history call behavior – history now does not return all existing publications in a channel by default. Migration guide covers this.
- Configuration options cleanups and changes (breaking changes described in details in migration guide).
- Channel options changes
- Time intervals now set as human-readable durations
- Client transport endpoint requests with Origin header set should now explicitly match patterns in
allowed_origins
- Improved Redis Engine configuration
- SockJS disabled by default
- Some options renamed, and some removed
history_max_publication_limit
andrecovery_max_publication_limit
options addedproxy_binary_encoding
option to give a tip to proxy that data should be encoded into base64.- HTTP proxy does not have default headers – should be set explicitly now
- JWT improvements and changes:
- Possibility to pass a list of server-side subscriptions with channel options
- Better control on token and connection expiration
- See docs
- Redis Engine uses Redis Streams by default. Migration guide covers this.
- GRPC proxy in addition to the existing HTTP proxy. Docs.
- Experimental Tarantool Engine. Docs.
- Enhanced server API functionality:
publish
API now returns offset and epoch for channels with history, fixes #446- Refactor
channels
API call to work in all cases (was unavailable for Redis Cluster and Nats broker before, fixes #382) b64data
andskip_history
added to Publish API- Enhanced
history
API (iteration) - Extended
disconnect
API - Extended
unsubscribe
API - New
subscribe
API call, fixes #367 - Refer to the docs.
- Enhanced proxy functionality
trace
log level added- Better clustering – handle node shutdown
- Better GRPC API package name – fixes #379
- Show total number of different subscriptions on Centrifugo node in Web UI
- Check user ID to be the same as the current user ID during a client-side refresh, fixes #456
- Drop support for POSTing Protobuf to HTTP API endpoint
- Using Alpine 3.13 as Docker image base
- Various client connector libraries improvements
- Various admin web UI improvements
- Introducing Centrifugo PRO
Docker images
docker pull centrifugo/centrifugo:v3.0.0
docker pull centrifugo/centrifugo:v3
docker pull centrifugo/centrifugo:v3.0
v3.0.0-beta.2
Second beta release of Centrifugo v3.
Documentation site for Centrifugo v3: https://centrifugal.dev