Skip to main content

Поддержание соединения: ping_req

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

Запрос и ответ: ping_req → ping_resp.
Доступ: токен любого уровня.

Текущая версия ONS

operation_id в ответ не возвращается. Счётчик seq начинается с 1 и доходит до 65536, после чего снова начинается с 1; в описании v0.17 указан диапазон 0–65535.

Запрос​

Поля без пометки «обязательно» можно не передавать.

ПолеТипОписание
cmdstringping_req
operation_idstringМожно передать, но в ответ сервер его не возвращает
{
"cmd": "ping_req"
}

Ответ​

ПолеТипОписание
cmdstringping_resp
sequint32Номер ping_req в этом соединении: 1, 2, 3… После 65536 счёт начинается с 1. В новом соединении счёт начинается заново
{
"cmd": "ping_resp",
"seq": 42
}

Ошибки​

Ошибок у команды нет: после connected сервер всегда отвечает ping_resp.

Что важно знать​

  • Отправляйте чаще тайм-аута. Сервер проверяет тайм-аут раз в 30 секунд и закрывает соединение на первой проверке после его истечения. При тайм-ауте 300 секунд достаточно ping_req раз в минуту.
  • Отсчёт — от подключения. Первый ping_req нужен в пределах тайм-аута после сообщения connected.
  • Закрытие по тайм-ауту — без предупреждения. Сервер не присылает сообщения и не отправляет кадр Close: клиент видит обрыв, например код 1006 в браузерном WebSocket. Подписка на данные при этом снимается — после переподключения подпишитесь снова.
  • До connected команда не работает. Запросы, отправленные до подтверждения подключения, сервер пропускает без ответа.

См. также​