التكوين والعمليات
قفل البوابة
آخر تحديث: 2025-12-11
السبب
- ضمان تشغيل نسخة بوابة واحدة فقط لكل منفذ أساسي على نفس المضيف؛ يجب على البوابات الإضافية استخدام ملفات تعريف معزولة ومنافذ فريدة.
- تحمل الأعطال/إشارة SIGKILL دون ترك ملفات قفل قديمة.
- الفشل السريع مع رسالة خطأ واضحة عندما يكون منفذ التحكم مشغولاً بالفعل.
الآلية
- تربط البوابة مستمع WebSocket (الافتراضي
ws://127.0.0.1:18789) فور بدء التشغيل باستخدام مستمع TCP حصري. - إذا فشل الربط مع
EADDRINUSE، يطرح بدء التشغيلGatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>"). - يقوم نظام التشغيل بإطلاق المستمع تلقائياً عند أي خروج للعملية، بما في ذلك الأعطال وSIGKILL—لا حاجة لملف قفل منفصل أو خطوة تنظيف.
- عند الإغلاق، تغلق البوابة خادم 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 خفيف الوزن الخاص به قبل إنشاء البوابة؛ يتم فرض قفل وقت التشغيل من خلال ربط WebSocket.