惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

I
InfoQ
Spread Privacy
Spread Privacy
GbyAI
GbyAI
F
Fortinet All Blogs
小众软件
小众软件
B
Blog RSS Feed
博客园_首页
量子位
Y
Y Combinator Blog
美团技术团队
H
Hackread – Cybersecurity News, Data Breaches, AI and More
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google DeepMind News
Google DeepMind News
大猫的无限游戏
大猫的无限游戏
Jina AI
Jina AI
T
The Blog of Author Tim Ferriss
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Vercel News
Vercel News
Last Week in AI
Last Week in AI
F
Full Disclosure
Stack Overflow Blog
Stack Overflow Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
宝玉的分享
宝玉的分享
Microsoft Azure Blog
Microsoft Azure Blog
有赞技术团队
有赞技术团队
A
About on SuperTechFans
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
The Cloudflare Blog
Hugging Face - Blog
Hugging Face - Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
T
Tenable Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Project Zero
Project Zero
C
CXSECURITY Database RSS Feed - CXSecurity.com
Engineering at Meta
Engineering at Meta
博客园 - 叶小钗
S
SegmentFault 最新的问题
T
Threat Research - Cisco Blogs
博客园 - 司徒正美
MyScale Blog
MyScale Blog
云风的 BLOG
云风的 BLOG
V
V2EX
酷 壳 – CoolShell
酷 壳 – CoolShell
The GitHub Blog
The GitHub Blog
V
Vulnerabilities – Threatpost
S
Schneier on Security
Latest news
Latest news
I
Intezer
A
Arctic Wolf
T
Threatpost

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Альтернативы Centrifugo для Laravel: Reverb, Pusher, Ably, Socket.IO, SSE и polling
Максим Гречушников · 2026-05-20 · via Все публикации подряд на Хабре

Простой

11 мин

5.5K

Centrifugo — сильное решение для real-time систем. Особенно когда нужен отдельный WebSocket-слой, приватные каналы, публикация событий из backend-а, масштабирование и независимость от конкретного фреймворка.

Но Centrifugo не единственный вариант. И точно не всегда лучший.

В Laravel-проектах можно использовать Reverb, Pusher Channels, Ably, Socket.IO, Server-Sent Events, polling, long polling и разные внутренние брокеры сообщений. Иногда Centrifugo будет правильным выбором. Иногда он окажется избыточным. Иногда, как ни странно, обычный HTTP-запрос раз в 15 секунд будет дешевле и надёжнее.

В этой статье разберём альтернативы Centrifugo для Laravel: где что выбирать, какие есть плюсы и минусы, когда WebSocket оправдан, а когда real-time архитектура становится дорогим украшением.

Какие есть варианты?

Если нужно быстро выбрать направление:

  • Polling — если обновления редкие и задержка не критична.

  • SSE — если нужен простой поток событий только от сервера к клиенту.

  • Laravel Reverb — если проект Laravel-first и нужна нативная интеграция с Broadcasting.

  • Pusher — если нужен быстрый managed real-time без своей инфраструктуры.

  • Ably — если нужен managed real-time с сильной платформой и SLA.

  • Socket.IO — если realtime-слой уже живёт в Node.js или нужна богатая двусторонняя интерактивность.

  • Centrifugo — если нужен отдельный self-hosted realtime gateway, независимый от Laravel.

Инфографика со сравнением real-time решений для Laravel: Polling, Long polling, SSE, Laravel Reverb, Pusher Channels, Ably, Socket.IO и Centrifugo с плюсами, минусами и шкалой сложности.

Сравнение альтернатив Centrifugo для Laravel: от простого polling и SSE до Laravel Reverb, managed-сервисов Pusher и Ably, Socket.IO и отдельного self-hosted real-time gateway на Centrifugo.

Главная мысль:

Выбирать нужно не самое модное решение, а достаточное решение под задачу, нагрузку, бюджет, команду и эксплуатационные требования.

Какие задачи решает real-time слой

Перед выбором технологии нужно понять, что именно должна делать система.

Real-time слой может решать разные задачи:

  • доставлять уведомления пользователю;

  • обновлять статусы заказов, платежей или задач;

  • показывать live-дашборд;

  • обновлять stream-виджеты;

  • поддерживать чат;

  • показывать presence: кто онлайн;

  • обновлять админские панели без перезагрузки;

  • доставлять события в интерфейс с минимальной задержкой;

  • восстанавливать состояние после потери соединения.

И это разные уровни сложности.

Обновить счётчик уведомлений раз в минуту — одно.
Сделать чат, live support, stream overlay или финансовый realtime dashboard — другое.

Вариант 1. Polling

Polling — это обычный периодический HTTP-запрос.

Например frontend раз в 10 секунд спрашивает backend:

  • Есть ли новые уведомления?

  • Изменился ли статус заказа?

  • Готов ли отчёт?

Пример:

setInterval(async function () {
    const response = await fetch('/api/notifications/count', {
        credentials: 'include',
        headers: {
            Accept: 'application/json',
        },
    });

    const data = await response.json();

    updateNotificationsCounter(data.count);
}, 10000);

Просто. Скучно. Работает.

И в этом нет ничего плохого.

Когда выбирать polling

Polling подходит, если:

  • данные обновляются редко;

  • задержка 5–30 секунд допустима;

  • пользователей немного;

  • нет сложных каналов и подписок;

  • real-time не является ключевой частью продукта;

  • команда не хочет поддерживать отдельный WebSocket-сервис.

Примеры:

  • статус генерации отчёта;

  • редкое обновление счётчика;

  • проверка готовности файла;

  • простая админская панель;

  • личный кабинет без критичных live-событий.

Плюсы polling

  • очень просто реализовать;

  • понятно любому backend-разработчику;

  • легко дебажить;

  • не нужен WebSocket;

  • не нужен отдельный сервис;

  • работает почти в любой инфраструктуре;

  • нет проблем с token refresh WebSocket-соединения.

Минусы polling

  • лишняя нагрузка при большом количестве клиентов;

  • есть задержка обновления;

  • плохо подходит для частых событий;

  • не подходит для чатов и live-интерфейсов;

  • много пустых запросов, если данные редко меняются.

Вывод по polling

Polling — нормальное решение, если бизнесу не нужен настоящий real-time.

Вариант 2. Long polling

Long polling — промежуточный вариант между polling и WebSocket.

Клиент отправляет HTTP-запрос, сервер держит его открытым до появления события или до timeout. После ответа клиент сразу открывает новый запрос.

Схема:

  • Frontend → HTTP request → Backend ждёт событие

  • Backend → response при событии или timeout

  • Frontend → сразу новый request

Long polling можно рассматривать, если:

  • WebSocket недоступен или нежелателен;

  • нужны более быстрые обновления, чем polling;

  • событий немного;

  • инфраструктура плохо поддерживает WebSocket;

  • нужен временный компромисс.

Плюсы long polling

  • работает поверх HTTP;

  • меньше пустых запросов, чем у polling;

  • может быть проще WebSocket в старой инфраструктуре.

Минусы long polling

  • сложнее обычного polling;

  • хуже WebSocket для частых событий;

  • держит открытые HTTP-соединения;

  • требует аккуратной настройки timeout;

  • плохо масштабируется без продуманной архитектуры.

Вывод по long polling

Long polling — компромисс. Иногда полезный, но чаще это временная ступень между обычным polling и полноценным realtime-слоем.

Вариант 3. Server-Sent Events

Server-Sent Events — это однонаправленная доставка событий от сервера к браузеру поверх HTTP. В браузере для этого используется EventSource: клиент открывает постоянное HTTP-соединение, а сервер отправляет события в формате text/event-stream. MDN описывает EventSource как интерфейс для server-sent events, при котором соединение остаётся открытым до закрытия.  

Пример frontend-кода:

const events = new EventSource('/api/events');

events.addEventListener('message', function (event) {
    const payload = JSON.parse(event.data);

    handleEvent(payload);
});

Когда выбирать SSE

SSE подходит, если:

  • нужны события только server → client;

  • клиенту не нужно отправлять сообщения по тому же соединению;

  • сценарии простые;

  • нужно обновлять статусы, прогресс, уведомления, live-ленту;

  • WebSocket выглядит избыточно.

Примеры:

  • прогресс выполнения задачи;

  • обновление статуса импорта;

  • уведомления;

  • live feed;

  • простые dashboard-обновления.

Плюсы SSE

  • проще WebSocket;

  • работает поверх HTTP;

  • нативно поддерживается браузером;

  • хорошо подходит для server-to-client событий;

  • понятная модель доставки.

Минусы SSE

  • однонаправленная связь;

  • не подходит для полноценного чата;

  • сложнее делать presence и приватные подписки;

  • нужны корректные настройки proxy и timeout;

  • не всегда удобно масштабировать в PHP-only окружении.

Вывод по SSE

SSE — хороший выбор, если нужен простой поток обновлений от сервера к клиенту. Если frontend не должен активно отправлять realtime-сообщения обратно, SSE часто проще WebSocket.

Вариант 4. Laravel Reverb

Laravel Reverb — first-party WebSocket server для Laravel-приложений. Он работает внутри Laravel-экосистемы и интегрируется с Laravel Broadcasting и Laravel Echo. В официальной документации Laravel среди broadcast drivers указаны Reverb, Pusher Channels, Ably и log driver для локальной разработки.  

Для Laravel-команды это самый естественный кандидат после обычного polling.

Когда выбирать Reverb

Reverb подходит, если:

  • проект полностью или почти полностью на Laravel;

  • нужна нативная интеграция с Laravel Broadcasting;

  • команда использует Laravel Echo;

  • нет отдельного multi-language realtime слоя;

  • нужен self-hosted WebSocket без SaaS;

  • нагрузка умеренная или предсказуемая;

  • команда хочет меньше интеграционного кода.

Плюсы Reverb

  • официальное Laravel-решение;

  • хорошая интеграция с Broadcasting;

  • удобный developer experience;

  • понятно Laravel-разработчикам;

  • не нужен внешний SaaS;

  • не нужен отдельный Go/Node realtime service;

  • можно быстрее стартовать внутри Laravel-проекта.

Минусы Reverb

  • привязка к Laravel-экосистеме;

  • хуже подходит как универсальный realtime gateway для разных языков;

  • эксплуатационно это всё равно long-running процесс;

  • нужны supervisor, мониторинг, логи, деплой;

  • для сложных multi-service сценариев может быть менее гибким, чем Centrifugo.

Когда Reverb будет хорошим выбором

Например:

  • личный кабинет Laravel SaaS;

  • уведомления;

  • статусы заказов;

  • простые админские панели;

  • умеренный real-time;

  • одна Laravel-команда;

  • один основной backend.

Когда Reverb может быть слабее

Если у вас:

  • несколько backend-сервисов на разных языках;

  • real-time должен быть отдельным инфраструктурным слоем;

  • много независимых источников событий;

  • нужна языковая независимость;

  • сложная модель каналов вне Laravel.

Вывод по Reverb

Reverb — хороший выбор, если проект Laravel-first и real-time нужен как естественное продолжение Laravel Broadcasting. Для многих Laravel-проектов это будет проще, чем Centrifugo.

Вариант 5. Pusher Channels

Pusher Channels — managed real-time сервис. Laravel давно поддерживает Pusher-подобную модель broadcasting, а Laravel Echo умеет работать с Pusher Channels. Pusher также указан в официальной документации Laravel среди поддерживаемых broadcast drivers.  

Когда выбирать Pusher

Pusher подходит, если:

  • нужно быстро запустить real-time;

  • нет желания администрировать WebSocket-сервер;

  • команда маленькая;

  • нагрузка умеренная;

  • бюджет позволяет SaaS;

  • SLA и скорость запуска важнее полного контроля инфраструктуры.

Плюсы Pusher

  • быстрый старт;

  • минимум эксплуатации;

  • хорошая интеграция с Laravel Echo;

  • не нужно думать о WebSocket-серверах;

  • не нужно отдельно настраивать scaling и monitoring сервера;

  • удобно для MVP и коммерческих продуктов с бюджетом.

Минусы Pusher

  • стоимость растёт с нагрузкой;

  • vendor lock-in;

  • ограничения тарифов;

  • данные и инфраструктура уходят во внешний сервис;

  • меньше контроля над внутренней механикой доставки.

Вывод по Pusher

Pusher хорош, когда скорость запуска и отсутствие инфраструктурной боли важнее полного контроля. Для MVP, малого SaaS или команды без DevOps-ресурса это может быть рациональнее self-hosted решения.

Вариант 6. Ably

Ably — managed real-time platform. Laravel поддерживает Ably как один из broadcasting drivers, а у Ably есть отдельная Laravel-интеграция для Pub/Sub.  

Когда выбирать Ably

Ably подходит, если:

  • нужен managed real-time;

  • важны SLA и глобальная доставка;

  • нужны дополнительные возможности платформы;

  • нет желания поддерживать self-hosted WebSocket;

  • проект коммерческий;

  • бюджет на инфраструктуру нормальный.

Плюсы Ably

  • сильная managed-инфраструктура;

  • меньше operational burden;

  • подходит для распределённых сценариев;

  • есть Laravel-интеграция;

  • не нужно держать свой WebSocket-сервер.

Минусы Ably

  • стоимость;

  • vendor lock-in;

  • зависимость от внешнего провайдера;

  • может быть избыточен для простых проектов;

  • часть решений придётся подстраивать под платформу.

Вывод по Ably

Ably стоит рассматривать, когда real-time — важная часть продукта, но команда не хочет или не может держать realtime-инфраструктуру сама.

Вариант 7. Socket.IO

Socket.IO — популярное решение из Node.js-мира для bidirectional и low-latency communication. Важно: Socket.IO не является чистой WebSocket-реализацией; официальная документация прямо указывает, что это отдельный протокол поверх WebSocket при возможности, с дополнительными механизмами и metadata.  

Socket.IO также умеет fallback на HTTP long-polling, если WebSocket-соединение недоступно.  

Когда выбирать Socket.IO

Socket.IO подходит, если:

  • основной realtime gateway уже на Node.js;

  • команда уверенно работает с Node.js;

  • нужна богатая двусторонняя интерактивность;

  • нужны комнаты, события, кастомная server-side realtime логика;

  • делается чат, multiplayer, collaborative UI, live-интерфейс.

Плюсы Socket.IO

  • зрелая экосистема;

  • много примеров;

  • удобная событийная модель;

  • есть комнаты;

  • есть fallback-механизмы;

  • хорош для чатов и интерактивных приложений.

Минусы Socket.IO

  • добавляет Node.js-инфраструктуру рядом с Laravel;

  • не является Laravel-native решением;

  • нужна отдельная интеграция авторизации;

  • нужны отдельный деплой, логи, мониторинг;

  • может быть избыточен, если нужно просто доставлять backend events в UI.

Вывод по Socket.IO

Socket.IO хорош, если у вас уже есть Node.js realtime слой или нужна сложная двусторонняя интерактивность. Для Laravel-only проекта он часто избыточен.

Вариант 8. Centrifugo

Centrifugo — open-source real-time messaging server. В официальной документации он описывается как сервер, который доставляет сообщения онлайн-пользователям через WebSocket, HTTP-streaming, SSE, WebTransport и другие транспорты; клиенты подписываются на каналы и получают публикации через одно соединение.  

Когда выбирать Centrifugo

Centrifugo подходит, если:

  • нужен отдельный realtime слой;

  • Laravel — не единственный backend;

  • события публикуют разные сервисы;

  • нужен self-hosted вариант;

  • не хочется платить SaaS по мере роста нагрузки;

  • нужны каналы, приватные подписки, presence, history;

  • важна языковая независимость;

  • real-time должен быть инфраструктурным компонентом, а не частью одного Laravel-приложения.

Плюсы Centrifugo

  • open-source;

  • language-agnostic;

  • self-hosted;

  • заточен под real-time messaging;

  • поддерживает разные транспорты;

  • хорошо подходит как отдельный realtime gateway;

  • может обслуживать несколько backend-сервисов;

  • отделяет Laravel business logic от WebSocket-соединений.

Минусы Centrifugo

  • ещё один сервис в инфраструктуре;

  • нужны деплой, конфигурация, мониторинг, логи;

  • интеграция с Laravel менее “родная”, чем у Reverb;

  • команде нужно понимать JWT, каналы, publish API, token refresh;

  • ошибки эксплуатации становятся частью real-time системы.

Когда Centrifugo сильнее Reverb

Centrifugo выглядит сильнее, если:

  • есть несколько backend-сервисов;

  • часть системы не на Laravel;

  • real-time должен пережить смену backend-фреймворка;

  • нужен самостоятельный gateway;

  • команда готова эксплуатировать отдельный сервис;

  • нагрузка и каналы могут расти независимо от Laravel.

Когда Centrifugo избыточен

Centrifugo может быть лишним, если:

  • проект маленький;

  • событий мало;

  • вся система — один Laravel backend;

  • команда не хочет держать отдельный сервис;

  • реального real-time почти нет;

  • обновление раз в 10 секунд достаточно.

Вывод по Centrifugo

Centrifugo оправдан, когда real-time — отдельная инженерная задача. Если же real-time в проекте — это пара broadcast-событий внутри Laravel, Reverb может быть проще.

Таблица сравнения

Решение

Когда выбирать

Когда излишне или недостаточно

Polling

Редкие обновления, простые статусы, допустима задержка

Чат, live dashboard, частые события

Long polling

Нужен компромисс поверх HTTP

Высокая частота событий, сложные каналы

SSE

Только server-to-client события

Нужна двусторонняя интерактивность

Laravel Reverb

Laravel-first проект, Broadcasting, Echo

Multi-language realtime gateway

Pusher

Быстрый старт без своей инфраструктуры

Большой трафик, жёсткий контроль бюджета

Ably

Managed real-time, SLA, глобальная доставка

Маленький проект без сложного realtime

Socket.IO

Node.js realtime, чат, interactive UI

Laravel-only проект без Node.js

Centrifugo

Self-hosted scalable realtime gateway

Простые редкие обновления

Что выбрать для Laravel-проекта

Маленький Laravel-проект

Выбор:

Polling или Reverb

Если обновления редкие — polling.
Если нужен настоящий WebSocket внутри Laravel-экосистемы — Reverb.

Centrifugo здесь может быть избыточным.

Laravel SaaS с личным кабинетом

Выбор:

Reverb или Centrifugo

Reverb проще, если всё крутится вокруг Laravel.
Centrifugo сильнее, если real-time планируется как отдельный слой.

MVP

Выбор:

Pusher или Ably

Задача MVP — быстрее проверить продукт. Managed-сервис может быть дешевле, чем неделя настройки собственного real-time слоя.

Highload или multi-service система

Выбор:

Centrifugo

Особенно если события приходят из разных сервисов, а real-time должен быть независимым от Laravel.

Enterprise или sensitive data

Выбор:

Reverb или Centrifugo self-hosted

SaaS может не пройти по требованиям безопасности, compliance или внутренней инфраструктурной политики.

Чат или сложная интерактивность

Выбор:

Socket.IO, Centrifugo или специализированная realtime-платформа

Тут важно смотреть на требования: presence, history, rooms/channels, нагрузка, интеграции, модерация, доставка, offline-сценарии.

Вывод

У real-time решений нет универсального победителя.

Reverb хорош как естественный путь для Laravel-проекта.
Pusher и Ably хороши, когда важны скорость запуска и managed-инфраструктура.
Socket.IO хорош там, где нужен Node.js realtime.
SSE и polling хороши там, где WebSocket будет избыточен.
Centrifugo хорош там, где real-time должен быть отдельным, масштабируемым и независимым инфраструктурным слоем.

Главная ошибка — выбирать технологию по моде.

Правильный подход другой:

Сначала требования, потом архитектура, потом инструмент.

И если после анализа окажется, что задачу решает обычный polling — это нормальное инженерное решение. Настоящая зрелость не в том, чтобы использовать WebSocket везде, а в том, чтобы не тащить production-сложность туда, где она не нужна.


Что еще почитать?

Если вы разбираетесь с real-time архитектурой в Laravel, одной статьи обычно недостаточно. WebSocket — это не только подключение клиента, а целая цепочка решений: backend, каналы, токены, события, очереди, frontend, эксплуатация и выбор подходящего инструмента.

Эта статья — часть серии про real-time архитектуру на Laravel и Centrifugo.

Что еще почитать?

  • Centrifugo — официальная документация
    Базовая документация по Centrifugo: сервер, каналы, подключения, публикации и основные сценарии real-time messaging.

  • Centrifuge JS client
    JavaScript-клиент для подключения браузера, Node.js или React Native к Centrifugo/Centrifuge-based серверу.

  • Centrifugo Client SDK specification
    Описание поведения клиентских SDK: подключение, подписки, reconnect, token refresh и обработка состояний клиента.

  • Laravel Broadcasting
    Официальная документация Laravel по broadcasting, Laravel Echo, channels, events и broadcast drivers.

  • Laravel Reverb
    Официальная документация Laravel Reverb — first-party WebSocket-сервера для Laravel-приложений.

  • Laravel Queues
    Документация по очередям Laravel: jobs, workers, retries, failed jobs и обработка фоновых задач.

  • Laravel Events
    Документация по событиям Laravel: events, listeners, subscribers и асинхронная обработка.

  • Laravel Echo
    Клиентская библиотека Laravel для подписки на broadcast-события во frontend-приложениях.

  • Pusher Channels
    Документация managed real-time сервиса Pusher Channels.

  • Ably Pub/Sub Channels
    Документация Ably по каналам, Pub/Sub и real-time messaging.

  • Socket.IO
    Документация Socket.IO — библиотеки для bidirectional event-based communication между клиентом и сервером.

  • MDN WebSocket API
    Базовое описание WebSocket API в браузере.

  • MDN EventSource / Server-Sent Events
    Документация по Server-Sent Events и интерфейсу EventSource.