Centrifugo v6 + FastAPI + Python: разрабатываем веб-опросник с обновлениями в реальном времени

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Друзья, приветствую!

Если вы следите за моими публикациями на Хабре, то знаете, что прошлую свою статью я посвятил теме разработки мини-чата с комнатами. Там я использовал такую технологию, как веб-сокеты. Реализовал я все через FastApi + Websockets, но это был лишь один из примеров возможной реализации Real-time приложений.

Сегодня же на теоретико-практическом примере я рассмотрю ещё один подход к реализации Real-time приложений, но уже при помощи такой технологии как Centrifugo.

План на сегодня

Статью, условно, мы разделим на два больших блока — теория и практика. В рамках теоретического блока мы разберемся с тем, что такое Centrifugo, где он используется и рассмотрим прочие теоретические аспекты.

Далее, для того чтобы закрепить теорию практикой — мы с нуля разработаем простое FullStack-приложение с наглядной демонстрацией реализации Real-time функционала.

Какое приложение будем сегодня разрабатывать?

Сегодня мы реализуем веб-приложение-опросник. Логика будет такой:

  1. Пользователь, попадая на главную страницу приложения, сможет выбрать интересующий его вопрос

  2. На странице вопроса он выбирает интересующий его вариант и нажимает на «Ответить»

  3. После этого его перебрасывает на страницу с результатами ответов

При запросе страницы с результатами ответов будет отправляться запрос к базе данных, и будет возвращаться текущая актуальная статистика по ответам (это же будет происходить и при обновлении страницы). То есть стандартная поллинг-логика, но, как вы понимаете, собрались мы тут не для этого.

Основная фишка страницы с результатами по конкретному вопросу будет заключаться в том, что актуальная статистика будет подгружаться в формате Real-time. То есть, вы сможете видеть динамику ответов без необходимости перезагрузки страницы. Это, как вы догадались, мы реализуем через Centrifugo.

Технический стек для веб-приложения

При разработке веб-приложения-опросника мы сегодня будем использовать:

  • Centrifugo – технология, которой посвящена статья

  • Tailwind – библиотека для стилизации HTML

  • FastApi – веб-сервер

  • HTTPX – библиотека для отправки асинхронных запросов (будем использовать ее для публикации сообщений в каналы Centrifugo)

  • SQLAlchemy – ORM для удобной работы с базой данных

  • SQLite – база данных проекта

Поскольку мы разрабатываем real-time приложение, финальным этапом нашей практической части станет его деплой на платформу Amvera Cloud. Я выбрал этот сервис за его удобство и простоту развертывания: достаточно просто перетащить файлы в интерфейсе или выполнить git push — все остальное Amvera Cloud сделает автоматически.

Приятно то, что Amvera позволит не только развернуть наше веб-приложение, но и там мы сможем поднять Centrifugo (забегая вперед скажу, что Centrifugo – это отдельный сервис, сравнимый с RabbitMQ, который я подробно рассматривал в статье «Телеграм-бот для бронирования столов на вебхуках: FastAPI, Aiogram Dialog, FastStream и RabbitMQ в единой экосистеме»).

Но, прежде чем мы приступим к практической части, давайте разберемся с тем, что же такое Centrifugo и как использовать его в своих проектах.

Что такое Centrifugo и для чего он используется?

Centrifugo — это сервер для отправки событий реального времени клиентам через WebSocket, HTTP-streaming, SSE и другие механизмы. Он помогает разработчикам легко добавлять push-уведомления, чаты, обновления данных в реальном времени и другие динамические функции в приложения.

Где он используется?

  • Чаты и мессенджеры (например, уведомления о новых сообщениях)

  • Обновления в реальном времени (например, биржевые котировки, результаты матчей)

  • Push-уведомления (например, уведомления о новых заказах в приложении доставки)

  • Системы мониторинга (например, обновления статуса серверов или устройств)

  • Совместная работа (например, редактирование документов в реальном времени в стиле Google Docs)

Почему Centrifugo — это круто?

Поддержка множества клиентов

  • Работает с браузерами, мобильными приложениями, IoT-устройствами

  • Можно подключаться через WebSocket, HTTP/2, SSE, gRPC

Горизонтальное масштабирование

  • Использует Redis, Tarantool или NATS для синхронизации между нодами

  • Легко масштабируется без изменения логики приложения

Простая интеграция

  • Работает как внешний сервис, не требует сложных изменений бэкенда

  • Имеет HTTP API и SDK для разных языков (JS, Python, Go и др.)

Безопасность

  • JWT-аутентификация, контроль подписок, доступ на основе токенов

Механизм восстановления сообщений

  • Позволяет клиентам восстанавливать потерянные сообщения (например, если отключился интернет)

WebSocket + HTTP fallback

  • Если WebSocket не поддерживается, автоматически переключается на другие протоколы

Легкий деплой в Docker

  • Можно быстро развернуть с помощью Docker, чем мы сегодня и займемся

Как это работает?

  1. Клиент подписывается на канал (channel), например: news-updates

  2. Бэкенд отправляет сообщение в Centrifugo через HTTP API

  3. Centrifugo пушит (рассылает) это сообщение всем подписчикам в реальном времени

Чем лучше, чем другие?

Платформа

Поддержка WebSocket

JWT-аутентификация

Скалируемость

Поддержка истории сообщений

Centrifugo

✅ Да

✅ Да

✅ Да (через Redis/Tarantool)

✅ Да

Socket.IO

✅ Да

❌ Нет (только свои механизмы)

Источник: https://habr.com/ru/companies/amvera/articles/885714/


Интересные статьи

Интересные статьи

Эксперты из МТУСИ предложили метод машинного обучения для обнаружение фишингового сайтаИнформационная безопасность веб-приложений является одним из наиболее актуальных вопросов современного мира,...
На дворе — 2024 год. Несмотря на непростые времена, люди продолжают творить, в том числе и игры. Практически все игры достойны ознакомления, многие сильно затягивают, не хуже, чем крупные западные т...
Говоря о разработке сайтов с использованием CMS 1C Bitrix вопрос покрытия тестами поднимается редко. Главная причина в том, что большинство проектов обходится штатным функционалом, который предоставля...
В прошлой части мы поговорили о советах директору по разработке бизнес-процесса в Битрикс24, сейчас же я постараюсь дать советы руководителям отделов, поскольку по моему опыту почти всегд...
Если вы последние лет десять следите за обновлениями «коробочной версии» Битрикса (не 24), то давно уже заметили, что обновляется только модуль магазина и его окружение. Все остальные модули как ...