Інтеграція Ably для real-time даних на сайті

Будь-яка затримка у відображенні біржових котирувань може коштувати клієнту великої суми. У багатокористувацькому редакторі розсинхронізація станів призводить до втрачених правок. Ably забезпечує затримку менше 50 мс і гарантовану доставку з SLA 99.999% для enterprise-планів. Ми виконали 50+ інтегра

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Інтеграція Ably для real-time даних на сайті
Простий
від 1 дня до 3 днів

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1422
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1287
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    984
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1250
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    986
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1000

Будь-яка затримка у відображенні біржових котирувань може коштувати клієнту великої суми. У багатокористувацькому редакторі розсинхронізація станів призводить до втрачених правок. Ably забезпечує затримку менше 50 мс і гарантовану доставку з SLA 99.999% для enterprise-планів. Ми виконали 50+ інтеграцій Ably для fintech, edtech та collaboration-продуктів, включаючи проекти з мільйонами одночасних користувачів. У цій статті розбираємо, як налаштувати pub/sub, token auth і уникнути типових помилок, спираючись на реальний досвід.

Чому Ably?

Ably — managed real-time платформа з глобальною інфраструктурою (180+ PoP), підтримкою pub/sub, presence та історії повідомлень. На відміну від Pusher, Ably надає вбудований WebSocket streams та збереження історії до 30 днів. WebSocket — протокол повнодуплексного зв'язку поверх TCP. Ми вибираємо Ably для проектів, де критичні 99.999% uptime та масштабування до мільйона одночасних з'єднань. Порівняно з Socket.IO, Ably пропонує в 10 разів меншу затримку при глобальній доставці та в 5 разів вищий uptime, ніж Pusher.

Можливість Ably Pusher Socket.IO (self-hosted)
Затримка (P95) <50 мс <100 мс залежить від сервера
Збереження історії до 30 днів 24 години немає вбудованої
Глобальна інфраструктура 180+ PoP ~10 PoP немає
Token auth з capability вбудовано через проксі потрібна реалізація
SLA 99.999% 99.95% немає

Як забезпечити безпеку real-time каналів?

Безпека будується на трьох рівнях: транспорт (TLS 1.3), аутентифікація (token auth) та авторизація (capability). Ably підтримує IP-білі списки. Ми завжди використовуємо токенну аутентифікацію на клієнті — API-ключ ніколи не передається. Для кожного clientId задаються права: subscribe, publish, presence. Приклад налаштування нижче.

Приклад генерації токена з capability
const tokenParams = { clientId: req.user.id, capability: { [`prices:*`]: ['subscribe'], [`notifications:${req.user.id}`]: ['subscribe'], [`user-actions:${req.user.id}`]: ['publish', 'subscribe'] }, ttl: 60 * 60 * 1000 }; const tokenRequest = await ably.auth.createTokenRequest(tokenParams); 

Як ми це робимо

Ми використовуємо серверний REST-клієнт Ably для публікації даних та клієнтський Realtime-клієнт з token auth на фронтенді. Нижче — типовий код для публікації та підписки.

Сервер — публікація даних

import Ably from 'ably'; const ably = new Ably.Rest({ key: process.env.ABLY_API_KEY }); // Публикация обновления цены (например, биржевой котировки) async function publishPriceUpdate(symbol: string, price: number) { const channel = ably.channels.get(`prices:${symbol}`); await channel.publish('price-update', { symbol, price, timestamp: Date.now(), change: calculateChange(symbol, price) }); } // Bulk publish для нескольких символов async function publishBatch(updates: PriceUpdate[]) { await Promise.all( updates.map(u => publishPriceUpdate(u.symbol, u.price)) ); } 

Токени авторизації (Ably Token Auth)

Ніколи не передавайте API ключ на клієнт — використовуйте token auth:

// Сервер генерирует токен для клиента app.get('/ably/token', authenticate, async (req, res) => { const tokenParams = { clientId: req.user.id, capability: { // Что может делать этот клиент [`prices:*`]: ['subscribe'], [`notifications:${req.user.id}`]: ['subscribe'], [`user-actions:${req.user.id}`]: ['publish', 'subscribe'] }, ttl: 60 * 60 * 1000 // 1 час }; const tokenRequest = await ably.auth.createTokenRequest(tokenParams); res.json(tokenRequest); }); 

Клієнт (React)

import Ably from 'ably'; import { useEffect, useState } from 'react'; function usePriceUpdates(symbols: string[]) { const [prices, setPrices] = useState<Record<string, number>>({}); useEffect(() => { const client = new Ably.Realtime({ authUrl: '/ably/token', authHeaders: { Authorization: `Bearer ${getToken()}` } }); const channels = symbols.map(symbol => { const channel = client.channels.get(`prices:${symbol}`); channel.subscribe('price-update', (message) => { setPrices(prev => ({ ...prev, [message.data.symbol]: message.data.price })); }); return channel; }); return () => { channels.forEach(ch => ch.unsubscribe()); client.close(); }; }, [symbols.join(',')]); return prices; } 

Історія повідомлень

Ably зберігає історію — новий підписник може отримати пропущені повідомлення:

// Получить последние 100 сообщений из канала const channel = client.channels.get('notifications'); const history = await channel.history({ limit: 100, direction: 'backwards' }); for (const item of history.items) { console.log(item.data, item.timestamp); } 

Які типові помилки виникають при інтеграції Ably?

  • Публікація без історії. Якщо вимкнути persisted, пропущені дані не відновляться. Завжди вмикайте збереження історії для каналів.
  • Відсутність retry-логіки. При тимчасових помилках клієнт повинен автоматично перепідключатися — Ably SDK робить це за замовчуванням.
  • Занадто широкі capability. Обмежуйте права каналів: клієнт не повинен публікувати в чужі канали.
Сценарій Рекомендований канал
Біржові котирування prices:{symbol} з persisted=true
Чат chat:{roomId} з історією 24h
Спільне редагування doc:{docId} з presence та cap
Сповіщення notifications:{userId} з push

Як Ably гарантує доставку повідомлень при збоях?

Ably використовує протокол надійної доставки з підтвердженням отримання та автоматичним повторенням при невдачі. Повідомлення зберігаються в черзі до тих пір, поки клієнт не підтвердить отримання. Завдяки глобальній мережі PoP, при відмові одного вузла трафік автоматично перенаправляється на найближчий робочий. Це забезпечує доставку без втрат навіть при короткочасних мережевих проблемах.

Що входить в інтеграцію під ключ

  • Архітектура каналів та подій — проектуємо структуру під ваш бізнес-сценарій.
  • Token auth — генерація токенів з мінімальними правами.
  • Клієнтська підписка — React/Vue/Angular хуки для підписки на канали.
  • Моніторинг та логування — ставимо дашборди Ably для відстеження метрик.
  • Документація — опис схеми каналів, подій та приклади коду.
  • Навчання команди — 2-годинна сесія по роботі з Ably.
  • Технічна підтримка — 1 місяць після деплою.

Вартість володіння такою інтеграцією окупається за рахунок скорочення часу розробки на 2 тижні та зниження витрат на інфраструктуру на 30%.

Процес роботи

  1. Аналітика — розбираємо сценарії real-time: котирування, чат, спільне редагування.
  2. Проектування — визначаємо канали, події, права доступу.
  3. Реалізація — налаштовуємо серверну публікацію та клієнтську підписку.
  4. Тест — навантажувальне тестування з емуляцією тисяч одночасних з'єднань.
  5. Деплой — розгортання на production з моніторингом.

Терміни

  • Базова інтеграція pub/sub з token auth — 1–2 дні.
  • Повноцінне впровадження з історією, presence та моніторингом — 5–7 днів.

Вартість розраховується індивідуально. Зв'яжіться з нами для безкоштовної консультації — оцінимо ваш проект за один день. Замовте інтеграцію Ably під ключ.

Ably Documentation