Все разделы

Протоколы

WebSocket

На этой странице

WebSocket-вкладка в Tetiva — это адрес, кнопка Connect, живой лог сессии и поле для отправки сообщений. Соединение открывается по сырому протоколу RFC 6455 и держится, пока открыта вкладка. Лог эфемерный: он существует в памяти приложения и исчезает вместе с вкладкой, а в историю запросов попадает только факт подключения.

Подключение#

Протокол выбирается при создании запроса — в диалоге New Request рядом с HTTP, gRPC и GraphQL есть кнопка WebSocket. Дальше в адресной строке вкладки нужен URL со схемой ws:// или wss://; другие схемы отклоняются с ошибкой валидации ещё до вызова, чтобы не пытаться открыть сокет к обычному HTTP-адресу.

Подключение запускает кнопка Connect или Enter в адресной строке; та же кнопка превращается в Disconnect. Пока соединение живо, адрес заблокирован от правок — чтобы поменять его, сначала отключитесь.

В адресе подставляются переменные активного окружения, а селектор окружения стоит прямо в шапке вкладки: {{ws_host}}/socket переключается между стендами без правки запроса. См. окружения и переменные.

Авторизация применяется на handshake — то есть на том самом HTTP-запросе, которым открывается соединение. Запрос, лежащий в коллекции с настроенной авторизацией и типом inherit, получит её заголовок автоматически; подробности наследования — в разделе авторизация. На сам handshake отводится 30 секунд.

Отправка сообщений#

Внизу вкладки — редактор с подсветкой JSON. Отправить содержимое можно кнопкой Send или Cmd/Ctrl+Enter: в WebSocket-вкладке этот шорткат отправляет сообщение, а не выполняет запрос, как в остальных протоколах. После отправки поле очищается, кнопка Send доступна только при живом соединении.

Наружу уходят текстовые фреймы. Отправленная строка появляется в логе сразу; если запись в сокет не удалась, строка помечается предупреждающим значком и приглушается — так видно, что сообщение не ушло.

Лог сессии#

Каждая строка лога — направление, время и содержимое. Входящие подсвечены зелёным, исходящие — фиолетовым, служебные сообщения о разрыве и ошибках идут отдельным цветом. Длинная строка обрезается по ширине; клик по ней разворачивает полное тело и сворачивает обратно. Лог сам прокручивается к последнему сообщению.

Tetiva
v0.17.0
WebSocket-вкладка в Tetiva: адрес, кнопка Disconnect и живой лог сессииWebSocket-вкладка в Tetiva: адрес, кнопка Disconnect и живой лог сессии
Входящие фреймы зелёные, исходящие фиолетовые; лог живёт, пока открыта вкладка

Бинарные фреймы приходят в логе в кодировке Base64 — сырые байты не переживают границу событий приложения. Ограничение на одно входящее сообщение — 8 МиБ.

Что сохраняется, а что нет#

Лог живёт только пока открыта вкладка. Закрытие вкладки разрывает соединение и стирает историю сообщений — переоткрыв запрос, вы получите пустой лог с надписью «No messages yet». Сам запрос (имя, адрес, коллекция) сохраняется как обычно по Cmd/Ctrl+S.

В историю запросов пишется одна запись на подключение: протокол, разрешённый адрес и результат — статус 101 при успешном handshake или текст ошибки, если соединение не открылось. Сообщения сессии в историю не попадают, поэтому если переписку нужно сохранить, скопируйте её из лога до закрытия вкладки. Как устроена история и повтор запросов — в разделе просмотр ответа.

обновлено