صف الخلل
لسبب ما عند استخدام وظيفة "UserAgent.stop ()" يستغرق الأمر حوالي 30 ثانية لإيقاف كل شيء حتى يستجيب بالوعد المناسب.
ما أحاول تحقيقه هو أمر إلغاء تسجيل كامل ، حيث لا يؤدي فقط إلى إلغاء التسجيل ولكن أيضًا:
مما أفهمه ، فإن وظيفة "stop ()" تفعل ذلك بالضبط. فقط يستغرق الكثير من الوقت.
السجلات
فيما يلي السجلات من وحدة التحكم: السجلات
السلوك المرصود
فقط بعد حوالي 32 ثانية يمكننا أن نرى في: 15: 14: 05.797
السجل التالي:
sip.subscribe-dialog | Timer N expired for SUBSCRIBE dialog. Timed out waiting for NOTIFY.
فقط بعد السجل أعلاه يتم التخلص من الناشرين ومستوى النقل (WS).
ما يجعلني أعتقد أنه قد يحدث نتيجة لرسالة "الاشتراك" هذه ، وهي انتهاء صلاحية جهاز ضبط الوقت ، ولكن لست متأكدًا تمامًا.
معلومات البيئة
أكده في الكود ...
@ 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()
بطيء جدًا أيضًا. ما يقرب من دقيقة واحدة ...شكرا لك.
كلا ، لم يتم حل هذه القضايا بعد.
لكن ، يمكنك فعل ما فعلته ... يمكنك فقط تدمير كائناتك يدويًا واحدًا تلو الآخر بالترتيب المنطقي التالي:
ويفضل أن تفعل كل عمل بوعود. أعني ، استخدم then
حتى تتمكن من انتظار وعد كل إجراء بالعودة والتصرف وفقًا لذلك للقيام بالخطوة التالية.
لدي نفس المشكلة. ليس لدي أي اشتراكات. بالنسبة لي ، يستغرق إغلاق WebSocket وقتًا طويلاً (20-50 ثانية)
حاولت:
userAgent.transport.ws.close()
للتأكد مما إذا كانت مشكلتي متعلقة بـ WebSocket.ليس لدي أي تكوينات محددة ، فقط اتبعت دليل SIP.js لإعادة الإنتاج. لا أعرف ما إذا كان هذا يساعد أو يتعلق بمشكلتي ولكنني حاولت فتح WebSocket باستخدام بروتوكول sip بدون أي مكتبة وأغلقها. كلاهما استمر أقل من ثانية واحدة.
التعليق الأكثر فائدة
لدي نفس المشكلة. ليس لدي أي اشتراكات. بالنسبة لي ، يستغرق إغلاق WebSocket وقتًا طويلاً (20-50 ثانية)
حاولت:
userAgent.transport.ws.close()
للتأكد مما إذا كانت مشكلتي متعلقة بـ WebSocket.ليس لدي أي تكوينات محددة ، فقط اتبعت دليل SIP.js لإعادة الإنتاج. لا أعرف ما إذا كان هذا يساعد أو يتعلق بمشكلتي ولكنني حاولت فتح WebSocket باستخدام بروتوكول sip بدون أي مكتبة وأغلقها. كلاهما استمر أقل من ثانية واحدة.