Отправляйте живые сообщения и информацию о присутствии с помощью JavaScript SDK
Ежедневные потоки aura.realtime с поведением каждого вызова, наблюдаемым в работающем стеке.
1. Каналы и их статус
Канал — это именованная комната. Клиенты, открывающие одно и то же имя, получают сообщения друг друга. Клиент подключается самостоятельно при подписке.
Отправлять только после SUBSCRIBED. До этого или после отказа send() вместо отправки возвращает статус типа not_connected или requires_subscription. Каналы привязаны к вашему проекту: два проекта могут использовать одно и то же имя, не видя друг друга.
2. Трансляция сообщений
В реальных условиях второй вошедший в систему клиент получил сообщение менее чем за две секунды.
Полученное сообщение содержит имя события, добавленное в 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. Присутствие
Присутствие показывает, кто подключен к каналу, в выбранном вами состоянии.
presenceState() кодируется идентификатором пользователя. В каждой записи перечислены подключения пользователя:
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; подпишитесь снова после восстановления. Сбой дольше часового срока хранения теряет изменения, сделанные за это время.
5. Очистка
Наблюдайте за соединением с aura.realtime.onStateChange(callback) и onError(callback). После отключения клиент повторно подключается, если вы не вызовете setAutoReconnect(false).