Lab Проектирование протоколов · Завершён

WebSocket: интерактивный эксперимент с запросами и ответами

Эксперимент Lab об ID запросов, тайм-аутах, ошибках сервера и дубликатах. Меняйте условия и наблюдайте, как каждая операция получает результат.

Попробовать эксперимент ↓
Роль
Проектировщик и инженер
Сроки
сент. 2026 г.
Технологии
TypeScript · Astro · Web Components
Голубая схема: сопоставить запрос, задать срок ожидания, убрать дубликаты
Lab 01 — три решения для протокола приложения. Иллюстрация на обложке.

Lab / 01

WebSocket: запрос и ответ

Что произойдёт, если ответ опоздает, завершится ошибкой или придёт дважды? Измените условия, отправьте запрос и проследите за результатом.

Локальная симуляция в браузере · без подключения к серверу

Условия соединения

Настройки действуют на новые запросы. Задержка — полное время до ответа в симуляции. Ошибка возвращается сервером; поздний ответ приводит к тайм-ауту. Копии используют один ID и один результат сервера.

В ожидании
0
Успешно
0
Ошибка
0
Тайм-аут
0

Операции
ID запросаСтатусЗадержка / тайм-аутДоп. копии

Запросов пока нет. Выберите сценарий или настройте условия.

Журнал событий · новые сверху

    До 40 операций и 100 последних событий за запуск. Очистите запуск, чтобы начать заново.

    Прочитать о проектировании →

    Задача

    Канал сообщений не определяет, как продукт должен сопоставлять ответы, прекращать ожидание и обрабатывать повторные запросы. Для этого нужен явный протокол приложения.

    Ограничения

    • Работает на статическом сайте без бэкенда и внешнего соединения.
    • Показывает поведение приложения, а не производительность сети или полный жизненный цикл WebSocket.

    Моя роль

    Я создал локальную симуляцию в браузере, которая показывает жизненный цикл запросов через настройки условий и журнал событий.

    Ключевые решения

    Сопоставлять по ID запроса

    У каждой операции уникальный ID. Дубликаты сохраняют его и остаются одной логической операцией.

    Завершать ожидание один раз

    Успех, ошибка приложения или тайм-аут завершают ожидание. Поздние и повторные ответы видны в журнале, но не меняют результат.

    Использовать один результат сервера

    Симуляция вычисляет один результат на ID. Копии возвращают его без повторного выполнения. Это учебная модель, а не надёжное хранилище ключей идемпотентности.

    Результаты

    • Четыре состояния, настраиваемые задержка и ошибки, дубликаты запросов и готовые сценарии.
    • До 40 операций и 100 последних событий; очистка отменяет все таймеры.

    Выводы

    • Тайм-аут завершает ожидание клиента, но не доказывает, что сервер ничего не сделал.
    • Отбрасывание повторных ответов клиентом и идемпотентность сервера решают разные части задачи.

    Три сравнения

    1. Отправьте запрос в сценарии Успешный ответ, затем уменьшите задержку и отправьте ещё один, пока первый ожидает. Порядок завершения может отличаться от порядка отправки.
    2. Выберите Поздний ответ и отправьте запрос. Операция завершится тайм-аутом; пришедший позже ответ попадёт в журнал и будет проигнорирован.
    3. Выберите Дубликаты запросов. Три доставки используют один ID, одно выполнение на сервере и один результат на клиенте.

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