# Ошибки и отладка
Важно: Документация Matcher WebSocket API описывает наиболее распространенные ошибки, которые могут возникнуть во время стримов. Однако предоставленная информация может не охватывать все возможные случаи. Вы можете встретить и другие стандартные ошибки. Если вы столкнулись с такими ошибками, свяжитесь со службой поддержки или командой разработчиков. Также обратите внимание, что Сервер очень старается, но не может гарантировать доставку всех ошибок Клиенту.
См. список всех возможных ошибок (opens new window).
# Handshake Errors
Ошибки могут возникать в момент подключения (handshake). Причина описывается в HTTP-заголовках ответа:
X-Error-Code - error code; X-Error-Message - error message;
Коды ошибок и сообщения аналогичны соответствующим полям JSON-объектов, описывающих ошибки, возвращаемые в HTTP Matcher API: https://github.com/wavesplatform/matcher/wiki/List-of-all-errors-(future-release)
# Operation Errors
Ошибки могут возникать во время работы. Такие ошибки содержат стандартизированный (opens new window) код и сообщение и приходят от сервера как системные сообщения. После таких ошибок соединение закрывается.
Пример ошибки:
{
"T": "e",
"_": 1585148910776,
"c": 8388624,
"m": "The order book for Emn8cyGDFgnLCKLTXqVWhKJARhtR2muBUuZaSmqNzDfn-Co11Tbj83TeZCnuXrZQwv6Bs4XG2sm1vGQiQ4FLDjJWs is stopped, please contact with the administrator"
}
В данном примере:
e это тип сообщения "error".
1585148910776 это Unix временная отметка обновления в миллисекундах. Данное поле предназначено для отладки.
8388624 это код ошибки.
m поле содержит сообщение с описанием ошибки.
# Другие возможные общие ошибки
Общие ошибки могут возникать во время любых стримов.
MatcherIsStopping
- сервер в процессе остановки. Обычно происходит при обновлении. Рекомендуется подключиться заново;
PongTimeout
- клиент не ответил на Ping. Может произойти из-за сетевых неполадок на стороне клиента. Рекомендуется исправить сетевые проблемы и подключиться заново;
UnexpectedError
- системная ошибка. Обратитесь в техподдержку;
# Отладка сетевого соединения
В некоторых ситуациях может потребоваться выполнить отладку соединения и со стороны клиента, и со стороны сервера. Вам потребуется атрибут, который отфильтрует записи и позволит соединить журналы обоих сторон. При открытии соединения, Matcher отправляет клиенту специальное сообщение, содержащее этот атрибут в поле i.
В случае возникновении проблем, необходимо отправить техподдержке или разработчикам Matcher значение данного атрибута, а так же желательно запросы по WebSocket со стороны клиента с временными метками. Это может сильно упростить диагностику проблемы.
Пример:
{
"T": "i",
"_": 1585148910776,
"i": "736fe9b1-59ad-4164-a942-c07a081678d5"
}
В данном примере:
i это тип сообщения - initial/information.
1585148910776 это Unix временная отметка обновления в миллисекундах. Данное поле предназначено для отладки.
736fe9b1-59ad-4164-a942-c07a081678d5 это id подключения.
# Обнаружение сетевых проблем на стороне клиента
TCP/IP, на котором построен WebSocket, старается гарантировать доставку сообщений, но 100% гарантии не существует. Для решения этой проблемы Matcher отправляет update id вместе с каждым доменным сообщением.
Поле update id:
Является инкрементальным. Т.е. следующее значение больше предыдущего на единицу;
Начинает отсчет с 0, который приходит вместе с snapshot доменной сущности;
Последнее значение - 9007199254740991. После него счетчик сбрасывается в 1;
Кодируется буквой "U";
Имеет собственное значение в каждом соединении;
Пример:
{
"U": 1025 // update id
}
В данном примере:
1025 это update id
Клиент должен следить за update id, закрывать соединение и открывать его снова, если не соблюдается одно из условий:
Первое доменное имеет update id = 0
Каждое следующее сообщение имеет значение update id = previous(update id) + 1
При достижении последнего значения, следующее должно быть равно 1
Примечание: Игнорирование данных рекомендаций может привести к нарушению консистентности сущности.
# Частые вопросы (FAQ)
Q: Почему 9007199254740991?
A: Это значение константы Number.MAX_SAFE_INTEGER в браузерах. Заметьте, что на данный момент из-за ограничения длительности соединения в 24 часа, последнее значение счетчика не может быть достигнуто.