Один запрос — один результат: эксперимент с WebSocket
Интерактивный разбор ID запросов, тайм-аутов и обработки дубликатов: решения и ограничения, которые делают небольшую симуляцию полезной.
Lab Проектирование протоколов · Завершён
Эксперимент Lab об ID запросов, тайм-аутах, ошибках сервера и дубликатах. Меняйте условия и наблюдайте, как каждая операция получает результат.
Попробовать эксперимент ↓
Lab / 01
Что произойдёт, если ответ опоздает, завершится ошибкой или придёт дважды? Измените условия, отправьте запрос и проследите за результатом.
Локальная симуляция в браузере · без подключения к серверу
| ID запроса | Статус | Задержка / тайм-аут | Доп. копии |
|---|
Запросов пока нет. Выберите сценарий или настройте условия.
До 40 операций и 100 последних событий за запуск. Очистите запуск, чтобы начать заново.
Задача
Канал сообщений не определяет, как продукт должен сопоставлять ответы, прекращать ожидание и обрабатывать повторные запросы. Для этого нужен явный протокол приложения.
Ограничения
Моя роль
Я создал локальную симуляцию в браузере, которая показывает жизненный цикл запросов через настройки условий и журнал событий.
Ключевые решения
У каждой операции уникальный ID. Дубликаты сохраняют его и остаются одной логической операцией.
Успех, ошибка приложения или тайм-аут завершают ожидание. Поздние и повторные ответы видны в журнале, но не меняют результат.
Симуляция вычисляет один результат на ID. Копии возвращают его без повторного выполнения. Это учебная модель, а не надёжное хранилище ключей идемпотентности.
Результаты
Выводы
Ошибки здесь — ответы приложения, а не потерянные пакеты. Модель не включает установку соединения, переподключение, аутентификацию и постоянное хранилище. Статья к эксперименту объясняет, почему эти границы важны.