# Socket.IO (/ru/docs/requests/socket-io)

Запрос Socket.IO подключается к серверу Socket.IO, присоединяется к пространству имён и остаётся подключённым: вы
отправляете события и видите события сервера по мере их прихода. Echolot поддерживает Socket.IO 2, 3 и 4 поверх
WebSocket.

<Shot id="requests-socketio-events" alt="Realtime › Support chat, подключённый к локальному серверу: вкладка «События» с пространством имён /support, сохранённым событием Say hello и журналом с отправленным событием и ответом сервера" />

<Callout title="Попробуйте на Alpenglow">
  **Realtime › Support chat** подключается к локальному серверу Socket.IO на `localhost:3001` из папки
  `examples/servers` репозитория документации (`bun run realtime`).
</Callout>

## Подключение [#connect]

1. Выберите **Файл › Новый запрос Socket.IO** или **Новый запрос Socket.IO** в меню **+** рядом с **Запросы** в боковой
   панели.
2. Введите адрес сервера, например `http://localhost:3001` (в Alpenglow — `{{realtimeURL}}`). Подходят `http://`,
   `https://`, `ws://` и `wss://`.
3. Выберите версию сервера в меню значка **SIO** перед адресом: **Socket.IO 4**, **Socket.IO 3** или **Socket.IO 2**.
4. Выберите **Соединить** (<kbd>⌘</kbd><kbd>R</kbd>). Пока соединение установлено, кнопка называется **Отключиться**.

В редакторе есть вкладки: **Документация**, **События**, **Заголовки**, **Параметры**, **Авторизация**, **Переменные**,
**Тесты**, **Скрипты** и **Настройки**. Заголовки, параметры запроса и авторизация уходят с рукопожатием WebSocket.

## Пространство имён, путь и авторизация [#namespace-path-and-auth]

Верх вкладки **События** задаёт, как клиент присоединяется:

| Поле | Что это |
| --- | --- |
| **Пространство имён** | Пространство имён для присоединения, например `/support`. Пусто — присоединяется к пути адреса или к `/` |
| **Путь** | Где слушает сервер. Пусто означает значение по умолчанию, `/socket.io/` |
| **Авторизация** | Данные авторизации — объект JSON вроде `{"token": "{{token}}"}`. Socket.IO 3 и 4 отправляют их при присоединении к пространству имён. Пусто — без них |

Храните токен в [секретной переменной](/docs/workspaces/secrets) и пишите в данных `{{token}}`, чтобы значение никогда не
попадало в файл запроса. Сервер, отказавший в подключении, отвечает ошибкой, которую журнал показывает красным.

## Отправка событий [#emit-events]

Внизу вкладки **События**:

1. Введите имя события, например `message`.
2. Введите его аргументы в виде JSON с `{{variables}}`. Массив — это несколько аргументов; любое другое значение —
   единственный аргумент. Оставьте пустым, если аргументов нет.
3. Отметьте **Ack**, чтобы попросить сервер подтвердить событие.
4. Выберите **Отправить** (<kbd>⇧</kbd><kbd>⌘</kbd><kbd>↩</kbd>).

Например, событие `message` с аргументами `{"text": "Grüezi!"}` отправляет один объект, а
`["order", {"id": "ord_7Hk2Lw"}]` — два аргумента.

Выберите **+**, чтобы сохранить событие вместе с запросом. У каждого сохранённого события есть имя, событие, его
аргументы, **Ack** и собственная кнопка **Отправить**. **Отправлять в прогонах** — флажок в её начале — решает, будет ли
событие отправляться, когда запрос выполняется без вас: [Прогон](/docs/requests/runner), командная строка и агенты
отправляют включённые события по порядку после присоединения, слушают 10 секунд и закрываются. В Support chat одно
сохранённое событие — **Say hello**.

## Журнал событий [#the-event-log]

Вкладка **Сообщения** области ответа показывает сеанс: каждое событие в обе стороны, самые новые последними, с временем
и размером.

- Каждая строка показывает имя события и пространство имён, а также идентификатор подтверждения, если оно запрошено.
  Подтверждение показывает идентификатор, на который отвечает.
- **Все**, **Отправлено** и **Получено** фильтруют по направлению; **Фильтр событий** находит события по имени или тексту.
- **Ещё** форматирует аргументы JSON с отступами.
- Когда сервер присылает событие, запрашивающее подтверждение, **Подтвердить** отвечает на него без аргументов.
- Двоичные вложения, пришедшие с событием, показываются под ним, каждое как **Вложение 1, Base64: …**.

Пакет Socket.IO принимает не более 1000 вложений общим размером до 64 МБ.

Когда соединение закрывается, сеанс сохраняется в [Истории](/docs/workspaces/history), а журнал становится телом ответа.

## Из командной строки [#from-the-command-line]

`echolot send --socketio` подключается из терминала: каждая введённая строка — событие и его аргументы JSON. Он также
запускает сохранённые запросы `.sio.toml`. См. [echolot send](/docs/cli/send).
