بعد أن قمت بالترقية إلى الإصدار 3 ، عندما أتصل بـ socket.disconnect()
على أي من جانبي العميل أو الخادم ، يبدو أن الاتصال الأساسي للمدير مغلق أيضًا - كما يتم فصل جميع المقابس الأخرى التي تستخدم نفس المدير / الاتصال الأساسي.
لا أعرف مكان تقديم هذه المشكلة. ربما لديه جذر في engine.io v4؟
إليك اختلاف في مشروعي أثناء الترقية . أعتذر عن احتوائه على بعض التغييرات غير ذات الصلة أيضًا. الشيء الرئيسي الذي أقصد تسليط الضوء عليه هو أنني لم أجري أي تغييرات على كيفية إعداد وإدارة الاتصالات (يمكنك cmd + F من أجل "قطع الاتصال" ، "إغلاق" ، "io.socket").
من فضلك انظر هذا jsfiddle .
سلوك v2 هو أن استدعاء socket.close()
على جانب العميل وعلى جانب الخادم يجب أن يغلق هذا المقبس فقط عندما يكون لدى المدير مساحات أسماء متعددة - يجب ألا يغلق كل مقبس متعدد الإرسال تحت مدير هذا المقبس.
لاحظ اختلاف السلوك عند استخدام socket.io v2 بدلاً من ذلك.
لقد قضيت وقتًا طويلاً في تصحيح أخطاء الكود الخاص بي معتقدًا أنني كسرت شيئًا ما: ")
نتطلع إلى الإصلاح! وشكرًا مرة أخرى على عملك الشاق في بدء الإصدار 3.
لا يتم إطلاق حدث "الاتصال" مطلقًا على اتصال المقبس ولا يملأ المصفوفة connecting
في المدير:
https://github.com/socketio/socket.io-client/blame/master/lib/manager.ts#L599
عندما يتم استدعاء _destroy if (this.connecting.length) return; this._close();
سيتم دائمًا إغلاق الاتصال.
لا أرى مشكلة في رمز العميل. في رمز الخادم لم أتمكن من العثور على أي حدث يسمى "الاتصال".
هنا الالتزام الذي يزيل انبعاث "الاتصال".
https://github.com/socketio/socket.io-client/commit/b60e909039d4bbb979d32ec86ac16c5398526b44#diff -f0e64910289a49966c99ceadaa5637404e3439ec0812a4bdb7003fe1e5a33d1c
darrachequesne هل يمكنك التحقق من هذه المشكلة.
@ david-fong يمكنني بالفعل إعادة إنتاج المشكلة ، شكرًا جزيلاً على الخطوات التفصيلية: +1:
يجب إصلاح ذلك من خلال https://github.com/socketio/socket.io-client/commit/f8f60fc860f51aa6465fc32dd9275a8e1d22f05d (مضمن في [email protected]
).
مرة أخرى ، شكرًا على التقرير المفصل ، فهذا يساعد حقًا!