Gateway kilidi
Neden
- Aynı ana bilgisayarda temel port başına yalnızca bir gateway örneğinin çalışmasını sağlamak; ek gateway’ler yalıtılmış profiller ve benzersiz portlar kullanmalıdır.
- Eski lock dosyaları bırakmadan çökme/SIGKILL durumlarından sağ çıkmak.
- Denetim portu zaten doluysa açık bir hatayla hızlıca başarısız olmak.
Mekanizma
- Gateway, başlangıçta özel bir TCP dinleyicisi kullanarak WebSocket dinleyicisini (varsayılan
ws://127.0.0.1:18789) hemen bind eder. - Bind işlemi
EADDRINUSEile başarısız olursa başlangıçGatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>")hatasını verir. - İşletim sistemi, çökmeler ve SIGKILL dahil her süreç çıkışında dinleyiciyi otomatik olarak serbest bırakır — ayrı bir lock dosyasına veya temizleme adımına gerek yoktur.
- Kapatma sırasında gateway, portu hızlıca serbest bırakmak için WebSocket sunucusunu ve alttaki HTTP sunucusunu kapatır.
Hata yüzeyi
- Port başka bir süreç tarafından tutuluyorsa başlangıç
GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>")hatasını verir. - Diğer bind başarısızlıkları
GatewayLockError("failed to bind gateway socket on ws://127.0.0.1:<port>: …")olarak yüzeye çıkar.
Operasyon notları
- Port başka bir süreç tarafından kullanılıyorsa hata aynıdır; portu boşaltın veya
openclaw gateway --port <port>ile başka bir port seçin. - macOS uygulaması, gateway’i başlatmadan önce hâlâ kendi hafif PID korumasını sürdürür; çalışma zamanı kilidi WebSocket bind’i tarafından uygulanır.
İlgili
- Birden Fazla Gateway — benzersiz portlarla birden fazla örnek çalıştırma
- Sorun giderme —
EADDRINUSEve port çakışmalarını tanılama