ما هي المصادر الجيدة لدراسة تنفيذ الترابط لتطبيق XMPP؟

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

  •  01-07-2019
  •  | 
  •  

سؤال

من وجهة نظري، يعتمد بروتوكول XMPP على اتصال دائم حيث لا يوجد لديك إشارة فورية إلى متى تنتهي رسالة XML.

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

سأكون ممتنًا لمصدر واحد لكل إجابة حتى نتمكن من تعديلها ومعرفة ما هو المفضل.

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

المحلول

هل ترغب في التعامل مع اتصالات متعددة في وقت واحد؟تعد المعالجة الجيدة للمقبس غير المتزامن أمرًا ضروريًا في هذه الحالة، لتجنب وجود مؤشر ترابط واحد لكل اتصال.

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

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

stanza = null
while parser has more:
  switch on token type:
     START_TAG:
       elem =  create element from parser state
       if stanza is not null:
         add elem as child of stanza
       stanza = elem
     END_TAG:
       parent = parent of stanza
       if parent is not null:
         fire OnStanza event
       stanza = parent

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

نصائح أخرى

يوفر Igniterealtime.org خادم XMPP مفتوح المصدر وعميلًا مكتوبًا بلغة جافا

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

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