الانتقال إلى المحتوى الرئيسي

قفل Gateway

لماذا

  • التأكد من تشغيل مثيل gateway واحد فقط لكل منفذ أساسي على المضيف نفسه؛ ويجب على أي gateway إضافية استخدام ملفات تعريف معزولة ومنافذ فريدة.
  • الصمود أمام الأعطال/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.

ذو صلة