Перейти до основного вмісту

Блокування Gateway

Чому

  • Забезпечує запуск лише одного екземпляра gateway на один базовий порт на тому самому хості; додаткові gateway мають використовувати ізольовані профілі та унікальні порти.
  • Переживає збої/SIGKILL, не залишаючи застарілих lock-файлів.
  • Швидко завершується з чіткою помилкою, якщо контрольний порт уже зайнято.

Механізм

  • Gateway прив’язує прослуховувач WebSocket (типово ws://127.0.0.1:18789) одразу під час запуску, використовуючи ексклюзивний TCP-прослуховувач.
  • Якщо bind завершується помилкою EADDRINUSE, запуск генерує GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>").
  • ОС автоматично звільняє прослуховувач під час будь-якого завершення процесу, включно зі збоями та SIGKILL — окремий lock-файл або крок очищення не потрібен.
  • Під час завершення роботи gateway закриває сервер WebSocket і базовий HTTP-сервер, щоб швидко звільнити порт.

Поверхня помилок

  • Якщо порт утримує інший процес, під час запуску генерується GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>").
  • Інші помилки bind відображаються як GatewayLockError("failed to bind gateway socket on ws://127.0.0.1:<port>: …").

Операційні примітки

  • Якщо порт зайнятий іншим процесом, помилка буде такою самою; звільніть порт або виберіть інший за допомогою openclaw gateway --port <port>.
  • Застосунок macOS, як і раніше, підтримує власний легкий PID-захист перед запуском gateway; runtime-блокування забезпечується через bind WebSocket.

Пов’язане