الخلاصة

  • يعرّف RFC 5267 سياق البحث أو الفرز المتجدد بوصفه نتيجة ابتدائية تتبعها عمليات ADDTO وREMOVEFROM الحساسة للموضع، وتُطبَّق بترتيب وصولها تحت وسم الأمر الأصلي.
  • ينص المعيار على عدم وجود آلية snapshot. قد يرفض الخادم المتابعة بواسطة NOUPDATE، وتنتهي الاستمرارية عند CANCELUPDATE أو إلغاء اختيار صندوق البريد أو ظهور فجوة نقل غير مفسرة.

حركة الشاشة لا تثبت اكتمال السجل

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

يسمح RFC 5267 بطلب UPDATE مع SEARCH أو UID SEARCH أو SORT أو UID SORT. يرسل الخادم النتيجة الأساسية، ثم يستطيع إرسال ردود ESEARCH غير مطلوبة تحمل ADDTO وREMOVEFROM. ويعيد correlator وسم أمر البحث الأصلي. لذلك لا يكون التغيير إشعاراً عاماً عن الصندوق، بل تعليمة تخص سؤالاً بعينه ونمط معرّفات وترتيباً محدداً.

أما CONTEXT فهو تلميح إلى احتمال إعادة استخدام المعايير. يمكن للخادم تجاهله أو استعماله لبناء cache أو index، على ألا يتغير السلوك المرئي. ولهذا يقول النص صراحة إنه لا توجد snapshot facility. ما يملكه العميل ليس صورة محفوظة لدى الخادم، بل نقطة بدء وسلسلة تغييرات يجب أن يثبت أنها لم تنقطع.

ADDTO وREMOVEFROM لغة رقع مرتبة

يحدد ADDTO موضع الإدراج والنتائج التي تدخل بالترتيب المطلوب، فيما يحدد REMOVEFROM موضع بدء الإزالة. تستخدم SEARCH وSORT أرقام تسلسل الرسائل، وتستخدم نسخ UID معرّفات UID. وجود الموضع يعني أن عكس ترتيب عمليتين قد ينتج قائمة مختلفة.

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

يجب أن يتضمن السجل القابل للتدقيق برنامج البحث، ونمط المعرّف، والترتيب، والوسم، والنتيجة الأساسية، وتسلسل الاستلام. ولا يجوز إعادة استخدام وسم سياق نشط لسياق آخر؛ على الخادم رفض ذلك بـBAD. فالوسم هو مفتاح نسبة الاستجابة غير المطلوبة إلى السؤال الصحيح.

معنى رقم التسلسل محكوم بموقعه على السلك

تتغير أرقام التسلسل بعد EXPUNGE. إذا نتج ADDTO يحوي أرقاماً عن تسليم أو append، فيجب أن يأتي بعد EXISTS، لأن الأرقام الجديدة لا تصح قبله. وإذا نتج REMOVEFROM عن expunge، فيجب أن يأتي قبل EXPUNGE، ما دامت الأرقام القديمة تحمل معناها.

تشكل EXISTS وFETCH وESEARCH وEXPUNGE محضراً سببياً واحداً. تقسيمها على قوائم انتظار مستقلة ثم جمعها بساعات خدمات مختلفة يهدم القيد المعياري. ويمكن أن يصل ESEARCH بلا أمر جارٍ، أو أثناء أمر آخر، أو خلال IDLE. لذلك فإن الرصد الذي يحفظ أزواج الطلب والرد فقط يفقد مادة التحديث الأساسية.

ولأرقام التسلسل داخل شرط البحث حد آخر: تُقيَّم لحظة استلام الأمر. لا يصدر تحديث لمجرد أن إعادة الترقيم اللاحقة جعلت الرقم نفسه يشير إلى رسالة أخرى. إعادة تفسير التعبير القديم في حالة جديدة تعني إجراء بحث جديد.

NOUPDATE يفصل صحة البداية عن استمرار الخدمة

قد يرفض الخادم توفير تحديثات إضافية عند بلوغ حد داخلي مثلاً. يرسل عندها NO غير موسوم يحمل NOUPDATE ووسم البحث المعني، مع بقاء بقية خيارات الإرجاع واجبة التنفيذ.

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

يفرض المعيار سياق تحديث واحداً على الأقل لكل عميل ويوصي بالمزيد، لكنه يقر بأن السياق المرتب أعلى كلفة. رفض SORT لا يثبت رفض SEARCH الأبسط. يمكن للعميل إعادة المحاولة أو إعلان النتيجة ثابتة؛ ولا يجوز له إخفاء الرفض.

PARTIAL يحدد نافذة العرض لا نطاق السلطة

يعيد PARTIAL نافذة موضعية من النتائج المرتبة، وهو مناسب للقوائم الافتراضية. لكن UPDATE لا يتقيد بخيارات الإرجاع الأخرى. عند جمعه مع PARTIAL قد تصل تغييرات تخص رسائل خارج النافذة. ولا تقصر COUNT أو MIN أو MAX التدفق على القيمة الموجزة.

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

استمرار التدفق بعد الفجوة لا يشفيها

تتوقف التحديثات عندما لا يعود الصندوق مختاراً أو عندما يرسل العميل CANCELUPDATE مع وسوم الأوامر الأصلية. إعادة الاتصال أو الاختيار أو البحث بالشروط نفسها تصنع ملاحظة جديدة؛ ولا تستأنف السلسلة القديمة.

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

يوفر CONDSTORE وQRESYNC مساراً آخر لإعادة المزامنة بشروطه الخاصة. ويساعد IDLE على استقبال الردود غير المطلوبة، فيما يحدد NOTIFY الاهتمام بالأحداث. لا تصلح أي قدرة منها تلقائياً سجلاً ناقصاً لـRFC 5267؛ يجب تنفيذ مسار الاستعادة والتحقق منه وبناء أساس جديد.

وفق أولوية الكود العامل، موضوع الإدارة ليس اسم المنتج «البحث الحي»، بل الأمر الفعلي، وجيل القدرات، والصندوق المختار، والنتيجة الأولية، والرقع المرتبة، وحد النهاية. الملاحظة الأولى، وقبول UPDATE، والحالة المعاد بناؤها، والصفحة المعروضة، وفعل المستخدم طبقات مختلفة من الواقع. إذا تعذر الرجوع من صف ظاهر إلى الوسم والترتيب السببي، فالموجود عرض متحرك لا إثبات للحاضر.

المصادر