Sip.js: تستغرق وظيفة UserAgent.stop () الكثير من الوقت

تم إنشاؤها على ٦ أكتوبر ٢٠٢٠  ·  7تعليقات  ·  مصدر: onsip/SIP.js

صف الخلل
لسبب ما عند استخدام وظيفة "UserAgent.stop ()" يستغرق الأمر حوالي 30 ثانية لإيقاف كل شيء حتى يستجيب بالوعد المناسب.

ما أحاول تحقيقه هو أمر إلغاء تسجيل كامل ، حيث لا يؤدي فقط إلى إلغاء التسجيل ولكن أيضًا:

  1. مسح جميع اشتراكات SIP.
  2. إغلاق اتصال مقبس الويب.

مما أفهمه ، فإن وظيفة "stop ()" تفعل ذلك بالضبط. فقط يستغرق الكثير من الوقت.

السجلات
فيما يلي السجلات من وحدة التحكم: السجلات

السلوك المرصود
فقط بعد حوالي 32 ثانية يمكننا أن نرى في: 15: 14: 05.797
السجل التالي:
sip.subscribe-dialog | Timer N expired for SUBSCRIBE dialog. Timed out waiting for NOTIFY.
فقط بعد السجل أعلاه يتم التخلص من الناشرين ومستوى النقل (WS).
ما يجعلني أعتقد أنه قد يحدث نتيجة لرسالة "الاشتراك" هذه ، وهي انتهاء صلاحية جهاز ضبط الوقت ، ولكن لست متأكدًا تمامًا.

معلومات البيئة

  • كاميليو 5.3.5 (مقبس الويب)
  • جوجل كروم 85.0.4183.121

    • SIP.JS 0.17.1

bug

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

لدي نفس المشكلة. ليس لدي أي اشتراكات. بالنسبة لي ، يستغرق إغلاق WebSocket وقتًا طويلاً (20-50 ثانية)

حاولت:

  • تدمير الكائن يدويًا كما يقترح slavikbialik .
  • إغلاق WebSocket يدويًا باستخدام userAgent.transport.ws.close() للتأكد مما إذا كانت مشكلتي متعلقة بـ WebSocket.
  • في Chrome و Firefox.

ليس لدي أي تكوينات محددة ، فقط اتبعت دليل SIP.js لإعادة الإنتاج. لا أعرف ما إذا كان هذا يساعد أو يتعلق بمشكلتي ولكنني حاولت فتح WebSocket باستخدام بروتوكول sip بدون أي مكتبة وأغلقها. كلاهما استمر أقل من ثانية واحدة.

wss

ال 7 كومينتر

أكده في الكود ...

@ john-e-riordan يبدو أن هذا الأمر يتعلق بمسألة ترتيب العمليات.

في الجزء العلوي من user-agent.stop() ننتقل إلى الحالة Stopped .

ثم ننتقل من خلال registerers ، sessions ، ثم subscriptions .

ترسل الدالة subscription.dispose() بشكل صحيح SUBSCRIBE Expires=0 برأس NOTIFY إلى SIP.js للإشارة إلى إغلاق الاشتراك. ومع ذلك ، هناك شيك في user-agent.onTransportMessage() يتحقق مما إذا تم إيقاف user-agent . ثم إسقاط NOTIFY بسبب حالة وكيل المستخدم. جعل المشترك ينتظر انتهاء المهلة.

سنعمل على الحصول على هذا التصحيح. شكرا.

تنص على أن هذا الاشتراك قد أغلق. ومع ذلك ، هناك شيك في user-agent.onTransportMessage() يتحقق مما إذا تم إيقاف user-agent . ثم إسقاط `إشعار بسبب

شكرًا جزيلاً على الاستجابة السريعة والعثور على السبب الجذري للمشكلة! آمل أن يتم إصلاحه قريبًا :)
بالمناسبة ، اختبرت وظيفة stop() عندما لا أقوم باشتراك SIP الأولي الذي أقوم به أيضًا عند إنشاء التسجيل ، وكل شيء يعمل بسرعة. لكن بالطبع سأحتاج إلى هذا الاشتراك.
الشكر مجددا!

لحل هذه المشكلة ، يمكنك التخلص من اشتراكاتك يدويًا قبل استدعاء stop() على وكيل المستخدم.

لحل هذه المشكلة ، يمكنك التخلص من اشتراكاتك يدويًا قبل استدعاء stop() على وكيل المستخدم.

شكرا! تم بالفعل ، ولكن ليس بطريقة فعالة على ما أعتقد. إذا كنت تستطيع أن تقترح لي طريقة أفضل ، فسيكون ذلك مفيدًا للغاية.
لدي بعض الاشتراكات التي أجريها أثناء تسجيل المستخدم (مثل الحضور والمؤتمر وبعض الأحداث الأخرى).
هل هناك طريقة للتكرار على جميع الاشتراكات النشطة واستدعاء طريقة dispose أو unsubscribe ؟
لقد رأيت أنه يمكنني الحصول على قائمة الاشتراكات من خلال القيام بما يلي: userAgentObject._subscriptions وهي تحصل على مجموعة من المشتركين ولسبب ما لا يمكنني أخذها والقيام بأي شيء بها ، مثل التكرار أو أي شيء آخر.

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

بالمناسبة ، ما الفرق بين dispose و unsubscribe ؟ أفترض أن dispose لن يقوم بإلغاء الاشتراك في PBX. يمين؟ إذا كان الأمر كذلك ، أعتقد أنه لا يوصى به ، لأنه في حالتي ، إذا لم أقم بإلغاء اشتراكي بالكامل ، فستستمر PBX في إرسال رسائل NOTIFY غير ذات صلة إلى Kamailio الخاص بي (مما قد يؤدي إلى حظر كامل لأن Kamailio سيحظر PBX الخاص بي إذا كان سيحظر تفرط فيه).

لحل هذه المشكلة ، يمكنك stop() على وكيل المستخدم.

أي تقدم😊؟ كيف تفعل هذا قبل أن يتم إصلاح الخلل؟

ليس لدي أي اشتراك ، ولكن UA.stop() بطيء جدًا أيضًا. ما يقرب من دقيقة واحدة ...

شكرا لك.

لحل هذه المشكلة ، يمكنك stop() على وكيل المستخدم.

أي تقدم😊؟ كيف تفعل هذا قبل أن يتم إصلاح الخلل؟

ليس لدي أي اشتراك ، ولكن UA.stop() بطيء جدًا أيضًا. ما يقرب من دقيقة واحدة ...

شكرا لك.

كلا ، لم يتم حل هذه القضايا بعد.
لكن ، يمكنك فعل ما فعلته ... يمكنك فقط تدمير كائناتك يدويًا واحدًا تلو الآخر بالترتيب المنطقي التالي:

  1. SubscriberObj.unsubscribe () ،
  2. المسجل () ؛
  3. userAgent.transport.disconnect () ،
  4. userAgent.stop () ،

ويفضل أن تفعل كل عمل بوعود. أعني ، استخدم then حتى تتمكن من انتظار وعد كل إجراء بالعودة والتصرف وفقًا لذلك للقيام بالخطوة التالية.

لدي نفس المشكلة. ليس لدي أي اشتراكات. بالنسبة لي ، يستغرق إغلاق WebSocket وقتًا طويلاً (20-50 ثانية)

حاولت:

  • تدمير الكائن يدويًا كما يقترح slavikbialik .
  • إغلاق WebSocket يدويًا باستخدام userAgent.transport.ws.close() للتأكد مما إذا كانت مشكلتي متعلقة بـ WebSocket.
  • في Chrome و Firefox.

ليس لدي أي تكوينات محددة ، فقط اتبعت دليل SIP.js لإعادة الإنتاج. لا أعرف ما إذا كان هذا يساعد أو يتعلق بمشكلتي ولكنني حاولت فتح WebSocket باستخدام بروتوكول sip بدون أي مكتبة وأغلقها. كلاهما استمر أقل من ثانية واحدة.

wss

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

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

DenisButCheR picture DenisButCheR  ·  7تعليقات

Pjata picture Pjata  ·  11تعليقات

josephfrazier picture josephfrazier  ·  26تعليقات

raphaelhovsepyan picture raphaelhovsepyan  ·  6تعليقات

kyle9292 picture kyle9292  ·  3تعليقات