XMPP: كيفية طلب خادم لحالة وجود جهات اتصال المستخدم؟

StackOverflow https://stackoverflow.com/questions/4029924

  •  26-09-2019
  •  | 
  •  

سؤال

لدينا موقع وقمنا بتطوير نظام دردشة له باستخدام مكتبة strophe.js وخادم ejabberd XMPP. نستخدم مرفق الجلسة الذي بدأ مع PHP (باستخدام مكتبة في المنزل). ما نقوم به هو الحصول على RID و SID من البرنامج النصي PHP ، ثم استخدم مرفق جلسة Strope. يتم تخزين RID و SID المذكور على ملف تعريف الارتباط ويتم تحديث قيمة التخلص على ملف تعريف الارتباط كل تحديث للتخلص على strophe.js.

هذا يعمل بشكل جيد ، بعد تسجيل الدخول ، نتلقى حالة وجود كل من جهات الاتصال الخاصة بنا. تكمن المشكلة في ذلك ، عندما تذهب إلى صفحة أخرى على الموقع ، وإرفاقها باستخدام التخلص المذكور (نستخدم القيمة المتزايدة التي تنتجها Strophe) و SID ، لن يرسل الخادم معلومات التواجد لجهات الاتصال الخاصة بك بعد الآن عندما قمت بتسجيل الدخول. تسبب هذا في ظهور منطقة جهات الاتصال الخاصة بنا غير مرئية على الرغم من أنها متصلة بالإنترنت. لن يظهروا فقط عبر الإنترنت إذا قمت (أو جهة الاتصال الخاصة بك) بتسجيل الخروج من الدردشة ، ثم قم بتسجيل الدخول مرة أخرى (نظرًا لأنك ستتلقى تحديثًا من خادم XMPP).

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

هل كانت مفيدة؟

المحلول

ترسل خوادم XMPP تحقيقات التواجد إلى جميع جهات الاتصال الخاصة بك نيابة عنك عند إرسال وجودك الأولي إلى الخادم. ومنذ ذلك الحين ، ستتلقى فقط تغييرات حالة الوجود من جهات الاتصال الخاصة بك.

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

يمكنك محاولة تمرير الدولة عبر XMPP. على سبيل المثال ، يمكنك استخدام XML Storage (XEP-0049) أو PubSub (XEP-0060) أو PEP (XEP-0163).

هناك خيار آخر بدلاً من ملفات تعريف الارتباط لتمرير جانب عميل تكنولوجيا المعلومات وهو استخدام كائن HTML5 Sharedworker لعقد الحالة.

نصائح أخرى

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

إذا كنت ترغب في تخزين المزيد من الحالة في المتصفح ، وعزل نفسك من إصدار المتصفح ، وأنت تستخدم بالفعل jQuery ، ثم JSTORE حلوة جدا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top