سؤال

أواجه مشكلة في تطبيق باستخدام Smack 3.1 وخادم يعمل OpenFire. عند بدء التطبيق ، ستقرأ الرسالة الأخيرة على العقدة. هذا لا يعمل لأن الرسائل يتم تحليلها ومعالجتها ووضعها في ديسيبل. إلى جانب إرسال وقت إنشاء الرسائل في الحمولة ، هل هناك أي طريقة لإيقاف هذا الازدواجية؟ (في الواقع إذا كان هناك على أي حال للإشارة إلى أن رسالة "تم استهلاكها" ستكون رائعة)

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

المحلول

إذا كنت تشير إلى PubSub ، فيمكنك إما تكوين العقدة بحيث لا تستمر persist_items و max_items.

إذا لم يكن لديك أي تحكم في إنشاء العقدة ، فإن ما يمكنك فعله هو التحقق من مساحة الاسم التأخير (jabber:x:delay و/أو urn:xmpp:delay) في الحزمة

public void processPacket(Packet pkt) {
   DelayInformation delay = (DelayInformation)pkg.getExtension("x", "jabber:x:delay");
   if (delay != null)
      return; //Discard this packet
   delay = (DelayInformation)pkg.getExtension("x", "urn:xmpp:delay");
   if (delay != null)
      return; //Discard this as well
   //Otherwise this is a good packet
   ...
}

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

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

تحتاج إلى الحصول على إما يبني ليلا أو بناء بنفسك لدعم PubSub. لا أعتقد أن الإصدار الحالي Smack 3.1.0 Supoorts PubSub.

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