Przejdź do głównej treści

Blokada Gateway

Dlaczego

  • Zapewnia, że na tym samym hoście działa tylko jedna instancja gateway na dany port bazowy; dodatkowe gateway muszą używać izolowanych profili i unikalnych portów.
  • Przetrwa crashe/SIGKILL bez pozostawiania nieaktualnych plików blokady.
  • Szybko kończy działanie z jasnym błędem, gdy port sterowania jest już zajęty.

Mechanizm

  • Gateway binduje listener WebSocket (domyślnie ws://127.0.0.1:18789) natychmiast przy uruchomieniu, używając wyłącznego listenera TCP.
  • Jeśli bind zakończy się błędem EADDRINUSE, uruchamianie zgłasza GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>").
  • System operacyjny automatycznie zwalnia listener przy każdym zakończeniu procesu, także po crashach i SIGKILL — nie jest potrzebny osobny plik blokady ani krok czyszczenia.
  • Przy zamykaniu gateway zamyka serwer WebSocket i bazowy serwer HTTP, aby szybko zwolnić port.

Powierzchnia błędów

  • Jeśli port jest zajęty przez inny proces, uruchamianie zgłasza GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>").
  • Inne błędy bindowania są zgłaszane jako GatewayLockError("failed to bind gateway socket on ws://127.0.0.1:<port>: …").

Uwagi operacyjne

  • Jeśli port jest zajęty przez inny proces, błąd jest taki sam; zwolnij port albo wybierz inny przez openclaw gateway --port <port>.
  • Aplikacja macOS nadal utrzymuje własną lekką blokadę PID przed uruchomieniem gateway; blokada środowiska uruchomieniowego jest wymuszana przez bind WebSocket.

Powiązane