Начните с заведомо рабочей подписки
slotSubscribe срабатывает каждый слот, примерно пять раз в секунду, поэтому почти сразу видно, работает ли само соединение. Установите wscat командой npm install -g wscat, затем:
Соединение отклонено
Аутентификация происходит во время рукопожатия WebSocket. Если она не прошла, сервер отвечает на запрос upgrade обычной HTTP-ошибкой с JSON-телом вместо переключения протокола. Многие библиотеки WebSocket сообщают только «unexpected server response: 403» и отбрасывают тело, поэтому проверьте рукопожатие через curl, чтобы увидеть настоящую причину:HTTP/1.1 101 Switching Protocols означает, что аутентификация прошла. В противном случае:
Что ещё проверить:
- Хост разрешается. WebSocket работает на RPC-хостах:
wss://{region}.rpc.orbitflare.com. Хостовwss://mainnet.rpc...иwss://global.rpc...не существует. Список приведён в разделе Инфраструктура. - URL начинается с
wss://. Если передать клиенту WebSocket URL сhttps://, ошибка возникнет ещё до того, как запрос дойдёт до OrbitFlare. - Только для TypeScript:
Cannot find package 'ws'означает, что не установлена необязательная peer-зависимость. Выполнитеnpm install ws.
Соединение есть, но обновлений нет
Сервер подтверждает каждую подписку числовым идентификатором. Если вы его так и не получили, запрос был отклонён, и в ответе сказано почему:- Аккаунт не меняется.
accountSubscribeсрабатывает только при изменении данных или лампортов аккаунта. Проверьте на аккаунте, который заведомо активен, напримерSysvarC1ock11111111111111111111111111111111, который меняется каждый слот. - Фильтр ничему не соответствует. Для
programSubscribeиlogsSubscribeадрес, который никогда не встречается в транзакциях, не порождает событий. Сначала проверьте адрес в обозревателе блоков. - Подпись старая.
signatureSubscribeзнает только о недавних транзакциях. Для всего, что старше нескольких минут, вызывайтеgetSignatureStatusesсsearchTransactionHistory: true. См. Ожидание подтверждения транзакции.
Обрывы соединения
Простаивающие соединения закрываются без предупреждения
Соединение без трафика в какой-то момент обрывается, причём резко, без фрейма закрытия, поэтому клиент видит код1006 с пустой причиной. Поддерживайте соединение, отправляя ping-фреймы WebSocket каждые 20–30 секунд:
После переподключения подписки пропали
Подписки привязаны к соединению. Когда оно обрывается, они исчезают, и новое соединение начинается без подписок. Храните список того, на что вы подписывались, и после переподключения отправляйте эти запросы заново. Учтите, что идентификаторы подписок меняются. SDK отслеживают подписки и переподписываются автоматически. Ваш циклsub.next() продолжает работать после переподключений.
Отписка не проходит
Invalid subscription id. означает, что такого идентификатора нет в этом соединении. Обычно соединение было заменено, и идентификатор принадлежит старому. Эту ошибку можно спокойно игнорировать.