Blokada Gateway
Ostatnia aktualizacja: 2025-12-11Dlaczego
- Zapewnienie, że na tym samym hoście działa tylko jedna instancja gateway na dany port bazowy; dodatkowe gateway muszą używać odizolowanych profili i unikatowych portów.
- Odporność na awarie/SIGKILL bez pozostawiania przestarzałych plików blokady.
- Szybkie zakończenie z czytelnym błędem, gdy port sterujący jest już zajęty.
Mechanizm
- Gateway wiąże nasłuch WebSocket (domyślnie
ws://127.0.0.1:18789) natychmiast przy starcie, używając wyłącznego nasłuchu TCP. - Jeśli wiązanie się nie powiedzie z
EADDRINUSE, uruchamianie zgłaszaGatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>"). - System operacyjny automatycznie zwalnia nasłuch przy każdym zakończeniu procesu, w tym przy awariach i SIGKILL — nie jest potrzebny osobny plik blokady ani krok sprzątania.
- Podczas zamykania Gateway zamyka serwer WebSocket oraz bazowy serwer HTTP, aby niezwłocznie zwolnić port.
Powierzchnia błędów
- Jeśli inny proces zajmuje port, uruchamianie zgłasza
GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>"). - Inne błędy wiązania są raportowane 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 lub wybierz inny za pomocą
openclaw gateway --port <port>. - Aplikacja na macOS nadal utrzymuje własną lekką blokadę PID przed uruchomieniem Gateway; blokada czasu wykonania jest wymuszana przez wiązanie WebSocket.