Skip to content

WebSocket API Home

Marcus Aurelius edited this page Dec 17, 2021 · 3 revisions

Binance WebSocket API

Протокол WebSocket («веб-сокет»), описанный в спецификации RFC 6455, обеспечивает возможность обмена данными между браузером и сервером через постоянное соединение. Данные передаются по нему в обоих направлениях в виде «пакетов», без разрыва соединения и дополнительных HTTP-запросов.

Binance даёт возможность подключаться к нему с помощью веб-сокетов, менять потоки в реальном времени, использовать комбинированные потоки.

Оглавление

[TOC]

Детальная информация по потокам

Общая информация по Binance Wss

  • Базовый эндпоинт: wss://stream.binance.com:9443
  • Доступ к потокам можно получить как в отдельном необработанном потоке, так и в комбинированном потоке.
  • Доступ к необработанному потоку: /ws/<streamName>. Например wss://stream.binance.com:9443/ws/bnbbtc@depth
  • Доступ к комбинированным потокам: /stream?streams=<streamName1>/<streamName2>/<streamName3>
  • В комбинированном потоке данные приходят в таком формате: {"stream":"<streamName>","data":<rawPayload>}. В необработанном так приходит непосредственно содержимое data
  • Все названия тикерных символов должны быть в нижнем регистре
  • Одно соединение с stream.binance.com действительно только 24 часа; ожидайте отключения через 24 часа
  • Сервер веб-сокетов будет отправлять ping frame каждые 3 минуты. Если сервер веб-сокетов не получит ответный pong frame за 10 минут, соединение будет разорвано. Разрешены не запрашиваемые pong frames.

Лимиты Websocket

  • Соединения WebSocket имеют ограничение в 5 входящих сообщений в секунду. Сообщением считается:

    • ping frame
    • pong frame
    • управляющее сообщение JSON (например, подписка, отказ от подписки)
  • Соединение, выходящее за рамки лимита, будет отключено; IP-адреса, которые постоянно отключаются, могут быть забанены.

  • Одно соединение может прослушивать максимум 1024 потока.

Подписка / Отказ от подписки в реальном времени

  • Если отправить определенный JSON через экземпляр веб-сокета, можно подписаться или отказать от подписки на потоки. Примеры таких JSON ниже.
  • id, используемый в JSON, представляет собой unsigned INT, используемый в качестве идентификатора для однозначной идентификации сообщений, идущих туда и обратно.
  • In the response, if the result received is null this means the request sent was a success for non-query requests (e.g. Subscribing/Unsubscribing).
  • В ответе, если полученный result равен null, это означает, что отправленный запрос был успешен. Это актуально для внеочередных запросов (например, подписка / отказ от подписки).

Подписка на поток

  • Request

    {
      "method": "SUBSCRIBE",
      "params": [
        "btcusdt@aggTrade",
        "btcusdt@depth"
      ],
      "id": 1
    }
  • Response

    {
      "result": null,
      "id": 1
    }

Отказ от подписки на поток

  • Request

    {
      "method": "UNSUBSCRIBE",
      "params": [
        "btcusdt@depth"
      ],
      "id": 312
    }
  • Response

    {
      "result": null,
      "id": 312
    }

Получение списка подписок

  • Request

    {
      "method": "LIST_SUBSCRIPTIONS",
      "id": 3
    }
  • Response

    {
      "result": [
        "btcusdt@aggTrade"
      ],
      "id": 3
    }

Установка параметров

В настоящее время единственное свойство, которое может быть установлено, это включение/отключение полезной нагрузки для комбинированного потока. Это свойство установлено в значение false при использовании соединения /ws/ (необработанные потоки, "raw streams") и true при подключении к /stream/.

  • Request

    {
      "method": "SET_PROPERTY",
      "params": [
        "combined",
        true
      ],
      "id": 5
    }
  • Response

    {
      "result": null,
      "id": 5
    }

Получение параметров

  • Request

    {
      "method": "GET_PROPERTY",
      "params": [
        "combined"
      ],
      "id": 2
    }
  • Response

    {
      "result": true, // Указывает, что в сombined установлен в значение true.
      "id": 2
    }

Сообщения ошибок

Error Message Description
{"code": 0, "msg": "Unknown property","id": %s} Параметр, используемый в SET_PROPERTY или GET_PROPERTY неправильный.
{"code": 1, "msg": "Invalid value type: expected Boolean"} Значение может быть толькоtrue или false.
{"code": 2, "msg": "Invalid request: property name must be a string"} Указанное имя свойства недействительно.
{"code": 2, "msg": "Invalid request: request ID must be an unsigned integer"} Параметр id не указан или в параметре id используется неправильный тип данных (не целочисленное целое).
{"code": 2, "msg": "Invalid request: unknown variant %s, expected one of SUBSCRIBE, UNSUBSCRIBE, LIST_SUBSCRIPTIONS, SET_PROPERTY, GET_PROPERTY at line 1 column 28"} Возможная опечатка в методе или метод не соответствует ожидаемым значениям.
{"code": 2, "msg": "Invalid request: too many parameters"} Указаны не нужные параметры.
{"code": 2, "msg": "Invalid request: property name must be a string"} Нет названия параметра
{"code": 2, "msg": "Invalid request: missing field method at line 1 column 73"} method не был указан в данных.
{"code":3,"msg":"Invalid JSON: expected value at line %s column %s"} Отправленный JSON имеет неправильный синтаксис.