Логотип Аурабаза
аурабазадокументы
документы›Путеводители›Realtime and presence (SDK)

Отправляйте живые сообщения и информацию о присутствии с помощью JavaScript SDK

Ежедневные потоки aura.realtime с поведением каждого вызова, наблюдаемым в работающем стеке.

7 мин читать·Уровень средний·Пересмотрено 12 окт. 2026 г.
Этот текст на английском языке был создан автоматически на основе французского оригинала и еще не проверялся.
Английский источник изменился после этого перевода. Некоторая информация может быть устаревшей.
Эта страница была переведена автоматически. Английская версия является авторитетной.
#
Каналы

1. Каналы и их статус

Канал — это именованная комната. Клиенты, открывающие одно и то же имя, получают сообщения друг друга. Клиент подключается самостоятельно при подписке.

channel.tstypescript
const room = aura.realtime.channel('room-1')

room.subscribe((status) => {
  // «ПОДПИСАН» | 'КАНАЛ_ОШИБКА' | 'TIMED_OUT' | 'ЗАКРЫТО'
  if (status === 'SUBSCRIBED') console.log('ready')
})

Отправлять только после SUBSCRIBED. До этого или после отказа send() вместо отправки возвращает статус типа not_connected или requires_subscription. Каналы привязаны к вашему проекту: два проекта могут использовать одно и то же имя, не видя друг друга.

#
Транслировать

2. Трансляция сообщений

broadcast.tstypescript
// Получать
room.on('broadcast', { event: 'ping' }, (message) => {
  console.log(message.payload) // { событие: «пинг», n: 1, текст: «привет» }
})

// Отправьте, как только ПОДПИШИТЕСЬ
const status = await room.send({ type: 'broadcast', event: 'ping', payload: { n: 1, text: 'hello' } })
// → 'ок'

В реальных условиях второй вошедший в систему клиент получил сообщение менее чем за две секунды.

Полезная нагрузка содержит ключ event.

Полученное сообщение содержит имя события, добавленное в payload: { "event": "ping", "n": 1, … }. Payload с собственным ключом event отклоняется (channel.send возвращает 'invalid_payload', httpBroadcast возвращает realtime_payload_event_reserved): переименуйте ключ, например в kind.

  • По умолчанию вы не получаете свои сообщения. Откройте канал с { config: { broadcast: { self: true } } }, чтобы получить их.
  • Сообщение содержит id, topic, timestamp, event и payload.
#
Присутствие

3. Присутствие

Присутствие показывает, кто подключен к каналу, в выбранном вами состоянии.

presence.tstypescript
const lobby = aura.realtime.channel('lobby', { config: { presence: { key: user.id } } })

lobby.on('presence', { event: 'sync' }, () => {
  console.log(lobby.presenceState())
})
lobby.subscribe(async (status) => {
  if (status === 'SUBSCRIBED') await lobby.track({ name: 'Bob' })
})

presenceState() кодируется идентификатором пользователя. В каждой записи перечислены подключения пользователя:

presenceState()json
{
  "d6ba3994-…": [
    { "client_id": "936cb015-…", "user_id": "d6ba3994-…", "metadata": { "name": "Bob" },
      "joined_at": "2026-10-12T19:32:19.093Z", "last_seen": "2026-10-12T19:32:19.096Z" }
  ]
}

untrack() удаляет вас из списка, а выход из канала или закрытие страницы делает это за вас.

#
Изменения

4. Изменения в базе данных

Проекты с собственной базой данных

postgres_changes работает в проектах с собственной базой данных. Сначала включите каждую таблицу: PUT /v1/db/{project_id}/schema/tables/{table}/realtime с телом {"enabled": true} и ключом service_role. Прослушивание начинается, когда подписывается первый клиент, и останавливается через несколько минут после ухода последнего. Доставка выполняется как минимум один раз: после перезапуска сервера изменение может прийти дважды, поэтому сделайте обработчик идемпотентным, например опираясь на первичный ключ строки. Загруженный кластер может отклонить новое прослушивание с ошибкой ёмкости; повторите попытку чуть позже. Называйте канал по таблице, db:public.<table>: изменения публикуются именно в этот канал. Первый подписчик может получить до 5 секунд изменений, сделанных незадолго до подписки. Изменения хранятся один час для восстановления, затем удаляются. Если кластер заполнен, подписка завершается ошибкой capacité d'écoute postgres_changes atteinte pour la base de ce projet, réessayez. Если прослушивание не восстанавливается больше минуты, канал переходит в CHANNEL_ERROR; подпишитесь снова после восстановления. Сбой дольше часового срока хранения теряет изменения, сделанные за это время.

changes.tstypescript
const changes = aura.realtime
  .channel('db:public.todos')
  .on('postgres_changes', { event: '*', schema: 'public', table: 'todos' }, (payload) => {
    console.log(payload.eventType, payload.new)
  })
  .subscribe((status) => {
    if (status === 'CHANNEL_ERROR') console.warn('database changes are not available for this project')
  })
#
Очистка

5. Очистка

cleanup.tstypescript
room.unsubscribe()                 // оставить один канал
aura.realtime.removeChannel(room)  // уйти и забыть об этом
aura.realtime.removeAllChannels()  // покинуть каждый канал
aura.realtime.disconnect()         // закрыть соединение

Наблюдайте за соединением с aura.realtime.onStateChange(callback) и onError(callback). После отключения клиент повторно подключается, если вы не вызовете setAutoReconnect(false).

Последнее обновление · 12 окт. 2026 г.