centrifugo README

The project's README from github.com/centrifugal/centrifugo. As one markdown file: README.md.

Centrifugo

Scalable real-time messaging server in a language-agnostic way.

CI Release Docker Pulls License Telegram Discord

Centrifugo is an open-source scalable real-time messaging server. It instantly delivers messages to application online users connected over supported transports (WebSocket, HTTP-streaming, Server-Sent Events (aka EventSource), GRPC, WebTransport). Centrifugo has the concept of channel subscriptions – so it's a user-facing PUB/SUB server.

Centrifugo is language-agnostic and can be used to build chat apps, live comments, multiplayer games, real-time data visualizations, collaborative tools, AI streaming responses, etc. in combination with any backend. It is well suited for modern architectures and allows decoupling the business logic from the real-time transport layer.

The core idea of Centrifugo is simple – it's a PUB/SUB server on top of modern real-time transports:

Centrifugo PUB/SUB diagram

Your backend communicates with Centrifugo over a simple HTTP or GRPC API to publish messages into channels, while clients subscribe to those channels using one of the official SDKs (or the unidirectional approach with no SDK dependency).

Quick start

Spin up Centrifugo with its embedded admin UI using Docker:

docker run -it --rm -p 8000:8000 centrifugo/centrifugo:latest centrifugo \
  --client.insecure --admin.enabled --admin.insecure
# ^ insecure flags: for local trial only, never use in production

Then open http://localhost:8000 to reach the admin UI, where you can watch live connections and publish messages into channels. The insecure flags above remove authentication for a frictionless local trial only – never use them in production.

For native binaries, Homebrew, packages, and production configuration see the installation instructions, and follow the quickstart tutorial to connect your first client.

Why Centrifugo

The hard part is to make the PUB/SUB concept production-ready, efficient, flexible and available from different application environments. Centrifugo is a mature solution that already helped many projects with adding real-time features and scaling towards many concurrent connections. It provides a set of features not available in other open-source solutions in the area:

Client SDKs

Official SDKs wrap Centrifugo's bidirectional protocol and handle reconnects, subscription state, message recovery, and more across platforms:

Platform / Language SDK
JavaScript (browser, Node.js, React Native) centrifuge-js
Dart / Flutter (mobile and web) centrifuge-dart
Swift / native iOS centrifuge-swift
Java (Android, JVM) centrifuge-java
Python (asyncio) centrifuge-python
Go centrifuge-go
.NET / MAUI / Unity [WIP] centrifuge-csharp

For simple use cases Centrifugo also supports a unidirectional approach (WebSocket, SSE, HTTP-streaming, GRPC) that needs no SDK – any standard client for the transport works. See the transports overview and the client protocol spec for details.

Documentation

Community

Found a bug or have an idea? Open an issue. Want to contribute? See CONTRIBUTING.md.

Backing

This repository is hosted by packagecloud.io.

Private NPM registry and Maven, RPM, DEB, PyPi and RubyGem Repository · packagecloud

Also thanks to JetBrains for supporting OSS (most of the code here written in Goland):

JetBrains logo

centrifugo (centrifugal/centrifugo)

Searching Database…

Что это?Centrifugo — это сервер для обмена сообщениями в реальном времени с открытым исходным кодом, не привязанный к языку программирования. Любой бэкенд может с его помощью отправлять сообщения подключённым клиентам по WebSocket, HTTP-streaming, SSE, GRPC или WebTransport. Это альтернатива с собственным хостингом для Pubnub, Pusher, Ably, Socket.IO, Phoenix.PubSub и SignalR.
Это библиотека, которую я подключаю, или отдельный сервер?Это отдельный сервер, который вы запускаете сами (через Docker, нативный бинарник или Homebrew). Ваш бэкенд общается с ним через простой HTTP- или GRPC API, чтобы публиковать сообщения, а клиенты подписываются на каналы с помощью официальных SDK.
Как его запустить?Чтобы попробовать локально, запустите его через Docker со встроенной админкой, затем откройте админку в браузере, чтобы смотреть подключения и отправлять тестовые сообщения. Для продакшена используйте нативные бинарники, Homebrew или пакеты с настоящей конфигурацией, следуя руководству быстрого старта.
Нужен ли мне Redis или что-то ещё для запуска?Один узел может работать сам по себе, но для масштабирования на несколько узлов нужен брокер: Redis (или Redis Cluster и совместимые хранилища, например Elasticache, Valkey, KeyDB, DragonflyDB), PostgreSQL или Nats.
Есть ли подводные камни при попытке быстрого старта через Docker?Флаги быстрого старта из README полностью отключают аутентификацию клиентов и админки ради простой локальной демонстрации. Никогда не запускайте с этими небезопасными флагами в продакшене.
Нужно ли писать бэкенд на Go, чтобы пользоваться этим?Нет. Centrifugo не привязан к языку: любой стек бэкенда может общаться с ним через HTTP или GRPC API. На нём строят чаты, живые комментарии, многопользовательские игры, дашборды в реальном времени и потоковые ответы ИИ.
Какие транспорты поддерживают клиентские SDK?WebSocket, HTTP-streaming, Server-Sent Events (EventSource), GRPC и экспериментальный транспорт WebTransport.
Можно ли подключиться без установки SDK?Да, Centrifugo поддерживает однонаправленный режим через WebSocket, SSE, HTTP-streaming или GRPC, которому не нужен SDK. Подойдёт любой стандартный клиент для этого транспорта.
Как Centrifugo аутентифицирует подключения?Поддерживается аутентификация на основе JWT или режим, похожий на прокси: Centrifugo отправляет запрос вашему бэкенду, чтобы проверить каждое подключение.
С какими инструментами мониторинга он интегрируется?Он предоставляет большой набор метрик Prometheus и включает официальный дашборд Grafana, а также встроенную веб-админку для просмотра живых подключений и публикации сообщений.
Size
168.1 MB
Stars
10.9K
Age
11y
Commits · 90 Days