"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا يفشل خادم WebSocket الخاص بي في الاتصال عند إرساءه؟

لماذا يفشل خادم WebSocket الخاص بي في الاتصال عند إرساءه؟

تم النشر بتاريخ 2024-12-23
تصفح:452

Why Does My WebSocket Server Fail to Connect When Dockerized?

تثبيت خادم WebSocket

المشكلة

يواجه المطور مشكلات أثناء محاولته وضع خادم WebSocket في حاوية باستخدام Docker. يكتب رمز الخادم إلى اتصال جديد مع "متصل" ويعمل بشكل جيد خارج الحاوية، ولكن عند وضعه داخل حاوية Docker، يشعر العميل بالذعر بسبب خطأ "إعادة تعيين الاتصال" مع رسالة الخطأ "قراءة tcp [::1] :60328->[::1]:8000: قراءة: إعادة تعيين الاتصال بواسطة النظير." المطور غير متأكد من التغييرات الضرورية لإنشاء اتصال WebSocket بالخادم داخل الحاوية.

الحل

لمعالجة هذه المشكلة، يحتاج المطور إلى تعديل عنوان الاستماع الخاص بالخادم . بدلاً من استخدام "localhost:8000"، الذي يحد من قدرة الخادم على الاستماع إلى عنوان IP 127.0.0.1 داخل الحاوية، يجب تغييره إلى ":8000."

]باستخدام ":8000" كـ عنوان الاستماع، سيستمع الخادم إلى جميع عناوين IP المخصصة للحاوية. يضمن هذا التعديل أنه عند إعادة توجيه حركة المرور إلى الحاوية على عنوان IP المخصص لها، سيكون هناك خادم استماع جاهز لقبول الاتصال.

دور Docker

يلعب Docker دورًا حاسمًا في هذا السيناريو عن طريق إنشاء قواعد iptables لإعادة توجيه حركة المرور من الجهاز المضيف إلى الحاوية. تعتبر هذه القواعد ضرورية للسماح للعميل بالاتصال بخادم WebSocket داخل الحاوية. افتراضيًا، تستمع حاويات Docker إلى عناوين IP الداخلية الخاصة بها، والتي لا يمكن الوصول إليها مباشرة من الجهاز المضيف. تعمل قواعد iptables التي أنشأها Docker على سد فجوة الاتصال هذه.

لعرض قواعد iptables هذه، يمكن للمطور استخدام الأوامر التالية:

iptables -n -L iptables -t nat -n -L
iptables -n -L
iptables -t nat -n -L
من خلال إجراء التغيير المذكور على عنوان الاستماع وفهم آلية إعادة توجيه Docker، يمكن للمطور إنشاء اتصال WebSocket بنجاح بالخادم داخل حاوية Docker، وحل مشكلة "إعادة تعيين الاتصال" " خطأ وتمكين السلوك المتوقع للطباعة "متصلة" من جانب العميل.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3