Socket.io: استمرار "إغلاق النقل" على العميل

تم إنشاؤها على ٣ أغسطس ٢٠١٧  ·  48تعليقات  ·  مصدر: socketio/socket.io

لقد قمت بإعداد socket.io v.1.4.5 w express ولم أتمكن من تتبع سبب قطع الاتصال غير المبرر على العملاء. السبب الذي قدمه حدث قطع الاتصال على العميل هو "إغلاق النقل". يحدث ذلك باستمرار مع بعض العملاء.

هل هناك أي تفسير لقيام العميل بقطع اتصال "إغلاق النقل" على ما يبدو أنه فترة زمنية محددة؟ يعيد العميل الاتصال على ما يرام ولكنه يسبب إزعاجًا شديدًا لأنه يحدث كثيرًا.

لقد جربت العديد من الإعدادات ، مثل تغيير pingInterval و pingTimeout والمنفذ لمآخذ الويب (أنا الآن أستخدم المنفذ 80). ولكن بغض النظر عما يبدو أنني أفعله ، فإن المشكلة لا تختفي أبدًا.

التعليق الأكثر فائدة

واجهت مشكلة فصل socket.io كل 30 ثانية بعد النشر إلى Google Cloud Platform (GCP). اتضح أنها مهلة http افتراضية يستخدمها Global Load Balancer. قالت وثائق برنامج "شركاء Google المعتمدون" أنه يجب عليك تغيير القيمة عند استخدام مآخذ الويب. تعليمات تغيير الإعداد هنا:
https://cloud.google.com/load-balancing/docs/backend-service#timeout -setting

ال 48 كومينتر

تم التحديث إلى socket.io v2.0.3. وما زلت تواجه المشكلة. يبدو أنه يحدث فقط على أحد أجهزة الكمبيوتر الخاصة بي. لقد قمت أيضًا بتعطيل جدار حماية Windows ، لكن المشكلة لا تزال تحدث.

تم التبديل إلى ws (https://github.com/websockets/ws) والتي تضمنت عمليات إعادة كتابة ضخمة ، لكنني الآن أستخدم كائن متصفح websocket الأصلي على جانب العميل ويعمل كل شيء بشكل مثالي. لم يعد لدي مشكلة. socket.io طويل جدا!

تعاني من نفس الشيء. أنا حقًا لا أرغب في إعادة الكتابة. أي شخص لديه أي نجاح مع هذه القضية؟

لقد تعبت حقا من هذه المشكلة.
أعتقد أنكم يجب أن تتحققوا من إصدار "socket.io" مع "socket.io-client".
إذا كان إصدار الخادم / العميل غير متطابق ، فإن الاتصال كان غير مستقر للغاية.

أوصي ببساطة باستخدام CDN كما هو موضح أدناه للعميل.

أي أخبار عن هذه المشكلة ، لأن لدي نفس المشكلة بالضبط!

لدي نفس المشكلة أيضًا عند النشر إلى k8ns ولكن عندما أقوم بالتشغيل محليًا ، فإنها تعمل بشكل جيد.

أنا أيضًا أعاني من هذا ...

@ talas9muhammadnasrhtamop الأسئلة الشائعة لتكون قادرة على التصحيح / إعادة إنشاء المشكلة:

  • ما هو إصدار العميل / الخادم الذي تستخدمه؟
  • أي متصفح؟
  • هل هو قابل للتكرار مع الكمان ؟

شكرا!

لقد جربتها مع العميل والخادم 2.1.0 و 2.0.4. على الكروم وسفاري (الأحدث).
عندما أقوم بالتشغيل محليًا ، فإنه يعمل بشكل جيد (يمكن توصيله لأكثر من ساعة دون قطع الاتصال) ، ولكن عندما أقوم بالنشر إلى K8ns خلف أداة تحميل التحميل ، تحدث هذه المشكلة ...

يتم إغلاق اتصال FYI تمامًا بعد 25 ثانية في كل مرة ، انظر لقطة الشاشة

@ talas9htamop @ dnwldbs84 الذي تستخدمه موازن تحميل؟

darrachequesne ما هو موازن التحميل الذي توصي باستخدامه مع socket.io؟

تضمين التغريدة
لقد استخدمت 2.1.0 Sever و 1.0.0 Client (android)
أحتاج إلى إبقاء الاتصال مستقرًا لمدة 8 إلى 9 ساعات ولكنه قطع الاتصال بشكل غير متوقع.
لقد غيرت كلا الإصدارين إلى 1.7.4 و 0.8.3؟ حسب آخر حل آخر. سأحاول اختبار ما إذا كان يعمل بشكل جيد غدا

لم أستخدم موازن التحميل. استخدم كل من العميل والخادم الإصدار 2.0.3 من Socket.io (لا أتذكر كل الإصدارات التي استخدمتها). لا أعرف أي متصفح يسبب المشكلة ، ومع ذلك ، فقد استخدم معظم المستخدمين Chrome. في حالتي ، كان قطع الاتصال عشوائيًا لذا لا يمكنه التكاثر.
وتغيرت إلى ws. لست متأكدًا مما إذا كان قد تم حل المشكلة.

muhammadnasrdarrachequesne @ dnwldbs84
أعتقد أنه تم حلها في حالتي.
أستخدم 0.8.3 socket.io-client في خدمة android الأمامية (api 26) وإصدار 1.3.5 في خادم nodejs.
ومع ذلك ، قد لا تكون المشكلة في الإصدار.
لقد غيرت pingInterval في الخادم إلى 10 مللي ثانية ويبدو أنه يعمل بشكل صحيح (لم يحدث انتهاء مهلة اختبار الاتصال والنقل)
var io = يتطلب ('socket.io') (http، {pingInterval: 10، pingTimeout: 4000}) ؛

10 ميللي ثانية ضيقة للغاية ، وبهذه الطريقة ستغرق الشبكة.

يتم تضييق 10 مللي ثانية ، وبهذه الطريقة ستغرق الشبكة.

صيح!

muhammadnasr يجب أن يعمل أي موازن تحميل. يرجى الاطلاع على الأمثلة التالية:

على الرغم من ذلك ، تكون الجلسة الثابتة مطلوبة ، إذا قمت بتمكين الاستقصاء (وهو الافتراضي).

darrachequesne لدي نفس المشكلة ، بعد 8 ~ 9 ساعات

أنا استخدم:

Chrome: 61.0.3163.100
Electron: 2.0.2
Socket.io: 2.1.1

واجهت نفس المشكلة ، وتمكنت من إصلاحها باستخدام CDN من هذا التعليق https://github.com/socketio/socket.io/issues/3025#issuecomment -329024833 وتعيين المهلة والفاصل الزمني كما يلي:

io.set('heartbeat timeout', 60000);
io.set('heartbeat interval', 25000);

مهلا،
لدينا نفس المشكلة مع socket.io عندما يعمل تحت Kubernetes و NGINX Ingress Controller.
عندما يتم إعادة تحميل تكوين nginx ، فإنه يعيد إنشاء العملية ويتم إسقاط جميع الاتصالات الموجودة ، مما تسبب في transport close ، وأي عمليات نشر أخرى تستخدم وحدة التحكم في الدخول قد تتسبب في إعادة تحميل التكوين

بادئ ذي بدء ، شكرًا حقًا على هذا المشروع الرائع.

نفس المشكلة هنا ، ربما سأحضر لك شيئًا جديدًا.

لدي خادم ws وعميل ws على عقدة js.
يتم استخدام عميل ws هذا من تطبيق node js حيث تكون خدمة (خدمة صغيرة).

يتواصل عملاء ws الآخرون من متصفحات الويب (من تطبيقات العميل) عبر خادم ws مع خدمة node js هذه.

كل شيء يعمل كما هو متوقع.

في اختبارات الإجهاد الآن (10 عملاء يسألون البيانات بشكل مكثف) ، في نهاية الاختبارات ، عندما تم الانتهاء من جميع الوظائف والمعاملات ، يتم إغلاق اتصال الخدمة مع الخطأ "إغلاق النقل". هذا لا يحدث دائما

هذا هو تكوين الخادم:
pingTimeout: 15000 ،
بينغ الفاصل الزمني: 20000 ،
يبدو أنه أثناء الحمل الثقيل فقدت بعض أدوات ping ...؟ أو لا أعرف.
هل هذا شيء يجب أن أتوقعه؟

أيضًا ، مع التكوين الافتراضي pingTimeout: 2000 ، كنت أتلقى هذا الخطأ في منتصف اختبار التحمل. كان هذا أيضًا غير متوقع تمامًا ، ولكن دعنا نقول أن الخادم كان محملاً بشكل زائد ولا يمكنه الاستجابة خلال ثانيتين (!) وقد نحصل على هذا الخطأ. ولكن الآن مع pingTimeout: 15000 يحدث ما يقرب من 50٪ وفقط بعد نهاية الاختبارات.

حسنًا ، أعتقد أن الخدمات الصغيرة يجب أن تتوقع هذا النوع من الأخطاء ، حتى لو كانت تعمل على نفس الشبكة المحلية ، لكن السؤال هو لماذا يحدث هذا؟

حاولت إنشاء إعداد صغير لإعادة إنتاج هذه المشكلة ولكن لم أتمكن من القيام بذلك.

كيف يتم تفعيل السجلات؟ التصحيح = socket.io * لا يعمل. على الرغم من تعيين المتغير ، إلا أنني لا أحصل على أي إخراج.

أعتقد بشدة أن هذا مرتبط بالرقم 2924.
تحدث عمليات إعادة الاتصال على العميل بسبب اختناق بعض المتصفحات (Safari و chrome) لأجهزة ضبط الوقت لعلامات التبويب غير النشطة لتوفير البطارية.
ينتج عن هذا تأخير رسائل نبضات القلب من العميل والخادم لإغلاق الاتصال بسبب pingTimeout.
تعمل زيادة pingTimeout إلى حد ما ولكني ما زلت أحصل على إعادة الاتصال في بيئة الإنتاج.

لدي نفس المشكلة أيضًا عند النشر إلى k8ns ولكن عندما أقوم بالتشغيل محليًا ، فإنها تعمل بشكل جيد.

muhammadnasr حيث يمكنك تجاوز مشكلة النشر على K8s؟ أنا أواجه مشاكل مماثلة.

@ bheema01 فقط تأكد من تمكين جلسة stickysession على الوكيل / loadbalancer الخاص بك ويجب أن تعمل

حصلت على نفس الخطأ

نفس المشكلة ..... يقوم العملاء بالاتصال وقطع الاتصال بشكل متكرر عندما تكون نقطة نهاية مأخذ توصيل جانب الخادم خلف موازن التحميل. حتى بعد تكوين الجلسات اللاصقة ، لا تزال المشكلة قائمة. muhammadnasr هل استطعت حل المشكلة.

لقد رأيت هذا الخطأ ، عندما تم حظر الخيط بشكل متكرر لأكثر من 200 مللي ثانية.
إذا حدث هذا بشكل متكرر ، فهذا سيء بالنسبة لـ socket.io _ وللتطبيق الخاص بك أيضًا_.
مهلة socket.io للتحقق من نبضات الاتصال.
إذا تم تجاوز هذه المهلة ، فسيتم إغلاق الاتصال ونحصل على هذا الخطأ.

varunSabnis بعد تثبيت الجلسة اللاصقة ، كل شيء

dennisat حاولت التحقق من الوقت الذي استغرقه موكلي لتلقي حزمة بونغ. في كل مرة تجاوزت 200 مللي ثانية ، والتي تم اختبارها مع خادم مأخذ التوصيل في السحابة وخادم المقبس على مضيفي المحلي. لا يقوم الإعداد المحلي بفصل المقبس (كل شيء يعمل بشكل جيد) ، بينما في مقبس الإعداد السحابي يتصل باستمرار ويفصل. لذا ، لا أعتقد أن هذه هي المشكلة.
muhammadnasr حسنًا ، هذا رائع. لقد قمت بتمكينه بالفعل ولكن لا تزال تواجه بعض المشكلات.

muhammadnasrdarrachequesne @ dnwldbs84
أعتقد أنه تم حلها في حالتي.
أستخدم 0.8.3 socket.io-client في خدمة android الأمامية (api 26) وإصدار 1.3.5 في خادم nodejs.
ومع ذلك ، قد لا تكون المشكلة في الإصدار.
لقد غيرت pingInterval في الخادم إلى 10 مللي ثانية ويبدو أنه يعمل بشكل صحيح (لم يحدث انتهاء مهلة اختبار الاتصال والنقل)
var io = يتطلب ('socket.io') (http، {pingInterval: 10، pingTimeout: 4000}) ؛

يعمل بطريقة سحرية ، شكرا !!!!!!!

أجد أنني حصلت على "إغلاق النقل" كل فترة ping.

لقد تعبت حقا من هذه المشكلة.
أعتقد أنكم يجب أن تتحققوا من إصدار "socket.io" مع "socket.io-client".
إذا كان إصدار الخادم / العميل غير متطابق ، فإن الاتصال كان غير مستقر للغاية.

أوصي ببساطة باستخدام CDN كما هو موضح أدناه للعميل.

القضايا ذات الصلة

jloa picture jloa  ·  4تعليقات

thebinarypenguin picture thebinarypenguin  ·  4تعليقات

adammw picture adammw  ·  4تعليقات

Elliot9 picture Elliot9  ·  4تعليقات

karmac2015 picture karmac2015  ·  3تعليقات
يستخدم موقع bleepcoder.com معلومات GitHub المرخصة بشكل عام لتزويد المطورين حول العالم بحلول لمشاكلهم. نحن لسنا تابعين لشركة GitHub، Inc. أو مع أي مطورين يستخدمون GitHub لمشاريعهم. نحن لا نستضيف أيًا من مقاطع الفيديو أو الصور على خوادمنا. جميع الحقوق تنتمي إلى أصحابها.
مصدر هذه الصفحة: مصدر

لغات البرمجة الشعبية
مشاريع GitHub الشعبية
المزيد من مشاريع GitHub

© 2024 bleepcoder.com - Contact
Made with in the Dominican Republic.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.