← Назад к вопросам

Что такое Centrifuge?

2.3 Middle🔥 61 комментариев
#DevOps и инфраструктура#Django

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое Centrifuge?

Centrifuge — это open-source платформа в реальном времени (real-time) на Go для масштабируемых коммуникаций между сервером и клиентом. Он разработан для замены WebSocket-серверов и обеспечения надёжной доставки сообщений в приложениях, требующих потока информации в реальном времени.

Основные концепции Centrifuge

1. Архитектура

Centrifuge работает как промежуточный слой между вашим приложением и клиентами. Приложение отправляет сообщения Centrifuge, а тот распределяет их клиентам по WebSocket-соединениям или другим протоколам.

# Пример использования centrifuge-python
from centrifuge import Client

client = Client('ws://localhost:8001/connection/websocket')

def connect_handler(client):
    print('Connected')

def disconnect_handler(client, reason):
    print(f'Disconnected: {reason}')

client.set_connect_handler(connect_handler)
client.set_disconnect_handler(disconnect_handler)

client.connect()

2. Каналы (Channels)

Это основная концепция в Centrifuge. Клиенты подписываются на каналы, и когда сервер отправляет сообщение на канал, все подписанные клиенты получают это сообщение.

# Подписка на канал
def subscribe_handler(client, channel, status):
    if status['success']:
        print(f'Subscribed to {channel}')
    else:
        print(f'Failed to subscribe: {status}')

client.subscribe('chat:room1', subscribe_handler)

# Получение сообщений
def message_handler(message):
    print(f'Received: {message}')

client.set_message_handler(message_handler)

Преимущества Centrifuge

  • Масштабируемость — эффективно работает с миллионами соединений
  • Надёжность — гарантирует доставку сообщений и восстановление после разрыва соединения
  • Простота — лёгкий API для интеграции
  • Поддержка различных транспортов — WebSocket, GRPC, Polling и др.
  • Встроенная токен-аутентификация — JWT для проверки подлинности клиентов

Сравнение с альтернативами

КритерийCentrifugeSocket.IORedis Pub/Sub
ЯзыкGoNode.js-
МасштабируемостьВысокаяСредняяВысокая
Надёжность доставкиЕстьОграниченнаяНет
ПростотаПростаяПростаяПростая
ПроизводительностьОтличнаяХорошаяОтличная

Архитектура система с Centrifuge

# Django приложение отправляет сообщение в Centrifuge
from centrifuge import Client

def notify_users(channel, message):
    client = Client('ws://centrifuge:8001')
    client.connect()
    client.publish(
        channel=f'chat:{channel}',
        data={'text': message, 'timestamp': datetime.now().isoformat()}
    )
    client.disconnect()

# На фронтенде клиент подписывается и получает сообщения

Использование Centrifuge в Python

Для работы с Centrifuge из Python приложения используется библиотека centrifuge-python:

pip install centrifuge

Когда использовать Centrifuge

  • Чаты и мессенджеры — доставка сообщений в реальном времени
  • Уведомления — push-нотификации для пользователей
  • Совместное редактирование — синхронизация изменений документов
  • Игры — обновление игрового состояния
  • Аналитика — потоковая передача метрик
  • Системы видеонаблюдения — трансляция видео и событий

Аутентификация и авторизация

Centrifuge использует JWT токены для аутентификации:

import jwt
from datetime import datetime, timedelta

SECRET = 'your-secret-key'

def generate_token(user_id):
    payload = {
        'sub': user_id,
        'iat': datetime.utcnow(),
        'exp': datetime.utcnow() + timedelta(hours=1)
    }
    return jwt.encode(payload, SECRET, algorithm='HS256')

Centrifuge — это мощный инструмент для построения высоконагруженных систем с требованиями к низкой латентности и высокой пропускной способности.

Что такое Centrifuge? | PrepBro