PubNub — глобальная сеть для real-time messaging, предоставляющая инфраструктуру для публикации и подписки на сообщения через WebSocket с минимальной задержкой. Она ориентирована на приложения, требующие надёжной доставки данных при высокой нагрузке и нестабильном соединении. По данным официальной документации PubNub (2025), платформа обрабатывает более 1 триллиона сообщений ежемесячно для 70 000+ приложений по всему миру.
Главное
PubNub — глобальная сеть передачи данных в реальном времени, основанная в 2010 году. Она предоставляет API для публикации и подписки на сообщения, а также дополнительные сервисы: хранение истории, управление присутствием, serverless функции (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('New message:', event.message);
},
presence: (event) => {
console.log('Presence:', 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('Error fetching history', 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 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также