WebSockets как сервис

Управляемая платформа реального времени за чатом и живыми данными foony.com, открытая для каждого разработчика на foony.io.

Сервис WebSocket держит постоянное соединение открытым между твоими серверами и каждым подключённым клиентом, так что обновления приходят в тот момент, когда происходят, а не при следующем обновлении страницы. Foony Realtime берёт на себя всю неприглядную работу: соединения, переподключения, рассылку, присутствие и историю сообщений — всё за одним небольшим SDK.

1.5Mигроков в месяц
500M+сообщений доставляется в месяц
<100msцель p95 по рассылке

Попробуй вживую

Всё, что ниже, прямо сейчас работает с продакшн-сервисом на realtime.foony.io. Открой эту страницу во второй вкладке и посмотри, как они отражают друг друга.

Присутствие и живые курсоры

Все, кто читают эту страницу, появляются здесь — прямо из присутствия канала. Позиции курсоров передаются как эфемерные сообщения — низколатентный уровень, который вообще пропускает хранилище.

1 сейчас здесьПодвигай мышкой. Кликни, чтобы помахать.

Живой чат

Это настоящий чат для этой страницы — та же комната @foony/chat, на которой работает каждая страница и игровая комната Foony. Сообщения приходят по одному каналу с историей, а отправка идёт через сервер Foony, так что каждое сообщение модерируется.

Здесь недавно никто ничего не говорил. Стань тем, кто растопит лёд.

Синхронизация базы данных

Это боевой конвейер foony.com: введи любое имя пользователя Foony, и его публичная строка Postgres прилетит по WebSocket сайта, а затем будет обновляться вживую по ходу игры. Никакого поллинга, никакого API-эндпоинта.

Ищем…

Почему команды покупают WebSockets, а не строят их сами

  • Переподключения без потери сообщений. Браузеры постоянно теряют соединение. Клиенты продолжают с того места, где остановились, благодаря воспроизведению истории, так что нестабильная связь не означает пропущенные сообщения.
  • Рассылка в масштабе. Доставить одно сообщение ста тысячам подписчиков менее чем за секунду — сложная задача распределённых систем. Здесь это вся работа целиком.
  • Присутствие без учёта вручную. Смотри, кто онлайн прямо сейчас, и реагируй на события входа, обновления и выхода — без написания собственной логики heartbeat и таймаутов.
  • Никакого планирования мощностей. WebSocket-серверы хранят состояние, поэтому масштабировать их самому — значит заниматься дренажом, шардингом и sticky-маршрутизацией. С управляемым сервисом за пейджер отвечает кто-то другой.

Что ты получаешь с Foony Realtime

Каналы и pub/sub

Рассылай именованные события по WebSocket или REST в каналы уровня приложения (например, chat:lobby) с предсказуемой семантикой доставки.

Присутствие

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

История сообщений

Воспроизводи недавние сообщения из надёжного хранилища, чтобы клиенты чисто восстанавливались после переподключений.

Авторизация по токенам

Выпускай короткоживущие клиентские токены со своего бэкенда с правами на публикацию, подписку, присутствие и историю на уровне канала.

Совместимость с Pusher

Говорит на протоколе Pusher, так что приложения на pusher-js и Laravel Echo подключаются изменением конфигурации, а не переписыванием.

Синхронизация базы данных

Стримь изменения Postgres прямо подписанным клиентам как живые запросы — без поллинга и связующего кода.

Вся интеграция — это пара строк:

const realtime = new Realtime({ authCallback });
const channel = realtime.channels.get('chat:lobby');

channel.on((message) => {
  showMessage(message.data);
});

await channel.publish('message', { text: 'hello' });
await channel.presence.enter({ name: 'Acorn' });

Проверено в реальных играх

Foony активно использует Foony Realtime для чата и обновлений базы данных в реальном времени. Около 1,5 миллиона игроков в месяц полагаются на foony.io примерно для 500 миллионов сообщений, а многопользовательская игра ощущается правильно только тогда, когда они приходят быстро, по порядку и ровно один раз. Foony был бы невозможен без надёжности и выгодной цены foony.io.

8 Ball Pool online multiplayer billiards thumbnailDinoMight Bomberman style online multiplayer thumbnailChess online multiplayer board thumbnail9 Ball Pool online multiplayer billiards thumbnailSnooker online multiplayer thumbnailCarrom board game online multiplayer thumbnail

Посмотри это в действии в любой из наших игр, а затем получи ту же инфраструктуру с дашбордом и SDK на foony.io.

Балби, маскот Foony

Попробуй на своём трафике

Бесплатный тариф включает 9 миллионов сообщений в месяц. Банковская карта не нужна.

Частые вопросы

Что такое WebSockets как сервис?

Это управляемая платформа, которая берёт на себя постоянные соединения между твоим приложением и его пользователями. Вместо того чтобы держать собственные WebSocket-серверы, твои клиенты подключаются к сервису, твой бэкенд публикует сообщения в каналы через SDK или REST, а сервис берёт на себя доставку, переподключения, присутствие и историю.

Чем Foony Realtime отличается от Pusher или Ably?

Он охватывает тот же базовый набор: каналы, присутствие, историю и авторизацию по токенам, и говорит на протоколе Pusher, так что работает как готовая замена Pusher. Разница в происхождении и цене. Он был создан для foony.com — нашего собственного сайта многопользовательских игр, а бесплатный тариф включает 9 миллионов сообщений в месяц.

Придётся ли переписывать приложение при переходе?

Обычно нет. Приложения на pusher-js и Laravel Echo можно направить на Foony Realtime простым изменением конфигурации. Новые проекты используют @foony/realtime SDK для JavaScript и TypeScript, Go SDK или REST API на любом языке.

Сколько это стоит?

Бесплатный тариф включает 9 миллионов сообщений в месяц. Платные планы добавляют месячную ёмкость, а использование сверх плана оплачивается за каждый миллион сообщений. Актуальные цифры смотри на foony.io/pricing.

8 Ball Pool online multiplayer billiards icon