PubNub — глобальна мережа для real-time обміну повідомленнями, що надає інфраструктуру для публікації та підписки на повідомлення через WebSocket з мінімальною затримкою. Вона орієнтована на додатки, що потребують надійної доставки даних при високому навантаженні та нестабільному з'єднанні. За даними офіційної документації PubNub (2025), платформа обробляє понад 1 трильйон повідомлень щомісяця для 70 000+ додатків по всьому світу.
Головне
PubNub — глобальна мережа передачі даних у реальному часі, заснована у 2010 році. Вона надає API для публікації та підписки на повідомлення, а також додаткові сервіси: зберігання історії, управління присутністю, серверні функції (PubNub Functions) та аналітику потоків даних.
Архітектура PubNub базується на розподіленій мережі точок присутності (POP), розташованих у 15+ географічних регіонах. Кожна точка містить кешуючі брокери, які маршрутизують повідомлення між видавцями та підписниками з мінімальною затримкою. PubNub не використовує єдиний центральний брокер — кожен регіон працює незалежно та синхронізується через глобальну мережу.
За даними офіційного сайту PubNub (2025), платформа обслуговує понад 70 000 додатків у 200+ країнах. Серед ключових клієнтів — Logitech (керування пристроями IoT), GoPro (трансляція відео в реальному часі), eBay (синхронізація аукціонів) і Snapchat (чат і сповіщення).
PubNub побудована на трьох принципах: швидкість (latency менше 10 мс у 95-му перцентилі в межах одного регіону), надійність (гарантія доставки at-least-once з автоматичним retry) і масштабованість (горизонтальне розширення без обмеження на кількість каналів). Платформа не зберігає повідомлення в довготривалому сховищі — історія доступна через окремо підключаємий сервіс Storage & Playback.
Модель роботи PubNub заснована на класичному пабліш-сабскрайб паттерні. Клієнт видавця надсилає повідомлення із зазначенням каналу через PubNub REST API з publish-ключем. PubNub доставляє повідомлення всім підписникам цього каналу через їхні активні WebSocket-з'єднання. Підписники отримують повідомлення через callback-обробник, зареєстрований у PubNub SDK.
Транспортний рівень PubNub використовує WebSocket як основний протокол, з fallback на HTTP long-polling для середовищ з обмеженнями. SDK автоматично керує з'єднанням: встановлює, підтримує heartbeat (кожні 15–60 секунд залежно від мережі) і перепідключається при обриві.
Кожне повідомлення в PubNub містить метадані: UUID відправника, timestamp, порядковий номер (timetoken) і прапорці (store, replicate, eatAfterRead). Timetoken — унікальний ідентифікатор PubNub, заснований на часі, який гарантує глобальний порядок повідомлень у каналі. За даними документації PubNub (2025), timetoken має роздільну здатність 10 наносекунд.
Коли клієнт публікує повідомлення, воно проходить через Stream Controller — модуль маршрутизації PubNub. Stream Controller перевіряє права доступу (PAM), застосовує правила трансформації (PubNub Functions), визначає цільові регіони та надсилає повідомлення всім підписникам. Якщо підписник відключений, повідомлення буферизується на 30 секунд (за замовчуванням) в очікуванні відновлення з'єднання.
Система ключів PubNub розділяє права доступу на три рівні: publish-ключ (тільки публікація), subscribe-ключ (тільки підписка) і secret-ключ (адміністрування). Кожен додаток отримує набір з трьох ключів при реєстрації, але secret-ключ ніколи не передається клієнту — він використовується тільки на серверній стороні.
Publish-ключ використовується для надсилання повідомлень у канали. Subscribe-ключ — для підписки на канали та отримання повідомлень. Secret-ключ — для керування доступом через PubNub Access Manager (PAM), створення тимчасових токенів аудиторії та керування ключами. Secret-ключ зберігається в безпеці на сервері й ніколи не розкривається клієнтам.
PubNub підтримує кілька режимів аутентифікації: за IP-адресою (для серверів), за секретним ключем (для адміністративних операцій), за тимчасовими токенами (для клієнтів). Тимчасові токени видаються через PAM з обмеженням за часом дії, каналами та правами (read, write, manage).
Канали PubNub — іменовані маршрути для повідомлень. Ім'я каналу — рядок довжиною до 92 символів, що підтримує символи латиниці, цифри, дефіси та підкреслення. Канали створюються динамічно при першій публікації або підписці. PubNub підтримує шаблони каналів через символ * у subscribe-запиті — це дозволяє підписатися на групу каналів (наприклад, user-*).
Channel Groups — механізм групування каналів для масової підписки. Замість підписки на 50 окремих каналів, клієнт підписується на одну групу, і всі повідомлення з каналів, що входять до неї, автоматично доставляються клієнту. Channel Groups підтримують вкладеність, але глибина не повинна перевищувати 3 рівні.
За даними технічної документації PubNub (2025), максимальна кількість підписників на один канал — 50 000. Для більш високих навантажень рекомендується використовувати канали з префіксами та шардувати аудиторію (наприклад, chat-room-001, chat-room-002). Channel Groups також можуть бути організовані за географічним або тематичним принципом.
| Параметр | Максимум | Примітка |
|---|---|---|
| Довжина імені каналу | 92 символи | Латиниця, цифри, -, _ |
| Підписників на канал | 50 000 | Вище — шардувати |
| Channel Groups | 2000 груп / ключ | До 500 каналів у групі |
| Історія (storage) | Безлімітно | Оплата за обсяг зберігання |
Інтеграція PubNub вимагає реєстрації, створення додатка в адмін-панелі та отримання набору ключів. Бібліотеки PubNub доступні для JavaScript, Swift, Kotlin, Java, Dart (Flutter), C#, Python, Ruby, Go та багатьох інших мов. Розглянемо приклад на JavaScript для браузера та Node.js.
За даними документації PubNub (2025), бібліотека pubnub-js підтримує як CommonJS, так і ES Module імпорт. Для браузера рекомендується використовувати збірку через npm з подальшим бандлінгом через webpack або Vite.
import PubNub from 'pubnub';
const pubnub = new PubNub({
publishKey: 'PUBLISH_KEY',
subscribeKey: 'SUBSCRIBE_KEY',
userId: 'user-100'
});
pubnub.subscribe({
channels: ['chat-general']
});
pubnub.addListener({
message: (event) => {
console.log('Нове повідомлення:', event.message);
},
presence: (event) => {
console.log('Присутність:', event.uuid, event.action);
}
});
pubnub.publish({
channel: 'chat-general',
message: { text: 'Hello everyone!', sender: 'user-100' }
});
pubnub.fetchMessages(
{ channels: ['chat-general'], count: 50 },
(status, response) => {
if (status.error) {
console.error('Помилка отримання історії', status);
return;
}
const messages = response.channels['chat-general'];
messages.forEach((msg) => {
console.log(msg.message, msg.timetoken);
});
}
);
PubNub Functions — serverless-платформа для обробки повідомлень на стороні PubNub. Функції пишуться на JavaScript і виконуються в безпечному ізольованому середовищі (V8 isolate). Вони можуть трансформувати, фільтрувати, буферизувати та перенаправляти повідомлення до того, як вони будуть доставлені підписникам.
Stream Controller — вбудований механізм маршрутизації, який керує потоком повідомлень на основі правил. Правила визначають, які повідомлення доставляються, які відкидаються, а які направляються в PubNub Functions для обробки. Stream Controller підтримує conditional routing за вмістом повідомлення, типом каналу або метаданими.
За даними блогу PubNub (2024), PubNub Functions скорочують витрати на серверну інфраструктуру для обробки повідомлень на 40–60% за рахунок того, що логіка фільтрації та трансформації виконується на граничних вузлах PubNub, а не на власному сервері. Функції мають доступ до HTTP-запитів, сховища Key-Value та інших функцій у тому ж просторі.
PubNub SDK для мобільних платформ доступні для iOS (Swift), Android (Kotlin/Java), Flutter (Dart) і React Native (JavaScript). Мобільні SDK підтримують повний набір функцій: pub/sub, присутність, історію, PAM і PubNub Functions. Для push-сповіщень PubNub інтегрується з APNs та FCM через спеціальний механізм mobile push gateway.
Оптимізація для мобільних пристроїв включає адаптивний heartbeat, пакетну обробку повідомлень та підтримку background modes. PubNub SDK для iOS використовує Background Task API для підтримання з'єднання при згорнутому додатку (до 30 секунд стандартного фонового часу). Для більш тривалої фонової роботи потрібне використання push-сповіщень.
Mobile Push Gateway — механізм надсилання push-сповіщень через PubNub. Коли повідомлення публікується в канал, PubNub автоматично визначає, які підписники відключені, і надсилає їм push-сповіщення через APNs (iOS) або FCM (Android). Налаштування виконується один раз в адмін-панелі — після цього всі повідомлення з каналу автоматично дублюються в push-канал. За даними документації PubNub (2025), gateway обробляє до 10 000 push-сповіщень на секунду.
Часті запитання
PubNub пропонує більше SDK (75+ платформ), вбудовані serverless функції та Stream Controller для обробки повідомлень. Pusher простіший у налаштуванні, але PubNub дає більше контролю над маршрутизацією та трансформацією даних.
PubNub використовує at-least-once механізм з автоматичним повтором при збоях. Кожне повідомлення має унікальний timetoken для дедуплікації. Повідомлення буферизуються на 30 секунд для офлайн-підписників.
Безкоштовний план включає 100 одночасних з'єднань і 1 мільйон повідомлень на місяць. Платні плани стартують від $49/міс за 1000 одночасних з'єднань з необмеженою кількістю повідомлень.
Так, PubNub підтримує TLS 1.3 для всіх з'єднань і опціональне end-to-end шифрування на клієнті (AES-256) з керуванням ключами через PAM. Для enterprise-клієнтів доступний режим Cipher Key.
PubNub надає SDK для 75+ платформ, включаючи JavaScript, Swift, Kotlin, Java, Dart, C#, Python, Ruby, Go, C++, PHP, Rust і Objective-C. Це найбільша екосистема серед real-time сервісів.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також