قفل Gateway
آخر تحديث: 2025-12-11لماذا
- ضمان تشغيل نسخة واحدة فقط من Gateway لكل منفذ أساسي على المضيف نفسه؛ ويجب على أي Gateways إضافية استخدام ملفات تعريف معزولة ومنافذ فريدة.
- الصمود أمام الأعطال أو SIGKILL دون ترك ملفات قفل قديمة.
- الفشل السريع مع خطأ واضح عندما يكون منفذ التحكم مشغولًا بالفعل.
الآلية
- يقوم Gateway بربط مستمع WebSocket (الافتراضي
ws://127.0.0.1:18789) فور بدء التشغيل باستخدام مستمع TCP حصري. - إذا فشل الربط مع
EADDRINUSE، يفشل بدء التشغيل معGatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>"). - يقوم نظام التشغيل بتحرير المستمع تلقائيًا عند أي خروج للعملية، بما في ذلك الأعطال وSIGKILL—ولا حاجة إلى ملف قفل منفصل أو خطوة تنظيف.
- عند الإيقاف، يغلق Gateway خادم WebSocket وخادم HTTP الأساسي لتحرير المنفذ بسرعة.
سطح الأخطاء
- إذا كانت عملية أخرى تحتفظ بالمنفذ، يفشل بدء التشغيل مع
GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>"). - تظهر إخفاقات الربط الأخرى كـ
GatewayLockError("failed to bind gateway socket on ws://127.0.0.1:<port>: …").
ملاحظات تشغيلية
- إذا كان المنفذ مشغولًا بواسطة عملية أخرى، يكون الخطأ هو نفسه؛ حرّر المنفذ أو اختر منفذًا آخر باستخدام
openclaw gateway --port <port>. - لا يزال تطبيق macOS يحتفظ بحارس PID خفيف خاص به قبل تشغيل Gateway؛ ويُفرض قفل وقت التشغيل عبر ربط WebSocket.