Skip to main content
Доставка выполняется не более одного раза — повторного воспроизведения нет. Данные, подтверждённые во время отсутствия соединения, не отправляются повторно, поэтому рабочий клиент должен обнаружить пропуск и решить, нужно ли его восполнить. Для этого используется context.slot: он определяет границы диапазона, пропущенного во время разрыва соединения. В этом руководстве объясняется, почему соединения закрываются, как корректно переподключаться и как использовать этот диапазон.

Почему соединения закрываются

При каждом закрытии соединения передаётся код закрытия WebSocket, который указывает, что произошло и что делать дальше: Сервер отправляет пинг каждые 15 секунд, поэтому даже исправное, но неактивное соединение продолжает передавать трафик. Если более минуты нет вообще никаких данных — ни уведомлений, ни пингов, — считайте соединение разорванным и переподключитесь, не дожидаясь сигнала от сокета.

Узкие фильтры и тайм-аут простоя

Если фильтр настолько узкий, что совпадений обоснованно может не быть в течение 10 минут, ожидайте, что сервер закроет соединение с кодом 1000. Обрабатывайте это как любое другое закрытие: переподключитесь, возобновите подписки и восполните пропуск, как описано ниже.

Переподключение и обнаружение пропуска

1

Reconnect with Backoff

При любом закрытии — ожидаемом или нет — переподключайтесь с экспоненциальной задержкой. Идентификаторы подписок не сохраняются после переподключения, поэтому повторно отправьте parsedTransactionSubscribe для каждого ранее открытого фильтра.
2

Track context.slot Across Disconnects

Сохраните последнее значение context.slot, полученное перед разрывом соединения. Промежуток между этим слотом и первым слотом, полученным после переподключения, точно соответствует пропущенному диапазону — не больше и не меньше.
3

Backfill if You Need To

Если приложение не допускает пропусков, восполните данные за этот диапазон слотов через RPC: используйте getSignaturesForAddress, чтобы перечислить транзакции в диапазоне, а затем getTransaction, чтобы получить каждую из них. Это ручной этап сверки — сами разобранные потоки не воспроизводят данные повторно.
Значение context.slot сохраняет актуальность после переподключения: отслеживайте наибольший слот, полностью обработанный до разрыва соединения, и считайте всё после него диапазоном для восполнения данных.

Обработка ошибок JSON-RPC

Неудачные запросы возвращают ошибку JSON-RPC вместо результата, поэтому логику обработки можно ветвить по error.code: Ошибки -32602 и -32000 означают, что сам запрос составлен неправильно: исправьте фильтр и не повторяйте запрос без изменений. Ошибки -32001 и -32002 временные; повторите запрос с той же задержкой, которую используете при переподключении.

Дальнейшие действия

Quickstart

Полное описание протокола: методы, поля фильтров и ограничения.

Track Jupiter Swaps

Создайте фильтр, на который можно подписаться через это соединение.