پرسش پشت اصطلاح
وبسوکت میتواند رویداد بعدی را فوری برساند در حالی که کلاینت بازگشته ده رویداد قبلی را بیصدا از دست داده است. درستی بلادرنگ به قرارداد ترتیب پایدار بیرون اتصال نیاز دارد.
رویکرد قابل بازبینی
وضعیت مرجع و توالی قابل مشاهده گیرنده را اتمی ثبت کنید. کلاینت نشانگر پایدار نگه میدارد، بازه دقیق را پس از اتصال میگیرد و با شناسه پایدار از تکرار کار خوشبینانه جلوگیری میکند.
- نامگذاری منبع حقیقت
- ثبت همزمان تغییر و نشانگر بازیابی
- همانیکردن تلاش مجدد
- آزمون فاصله، تکرار، بیترتیبی و بازنشانی
مرزی که باید دیده شود
تضمین ترتیب باید محدوده را نام ببرد. توالی هر کاربر میتواند تغییر حساب را مرتب کند بدون ترتیب جهانی همه رویدادها؛ وضعیت حضور نیز مشاهده زودگذر است، نه شاهد پایدار.
تحویل بلادرنگ با بازیابی پایدار فرق دارد
اتصال زنده تا وقتی برقرار است تأخیر را کم میکند، اما ثابت نمیکند دستگاه در زمان قطع شبکه همهٔ تغییرها را دیده است. سامانهٔ بازیابیپذیر تغییر مرجع را پایدار ثبت میکند، در محدودهای روشن نشانگر ترتیب میدهد و امکان درخواست بازهٔ ازدسترفته را فراهم میکند.
فرض کنید کلاینت رویداد ۴۱ را اعمال کرده و پس از اتصال دوباره ۴۴ را میگیرد. باید ۴۲ و ۴۳ را بازیابی و بهترتیب اعمال کند، سپس ۴۴ را بپذیرد. پذیرفتن ۴۴ بهعنوان حقیقت تازه دو تغییر را پنهان میکند. سرور باید تاریخچهٔ کافی برای پنجرهٔ بازیابی مستند نگه دارد یا مسیر همگامسازی کامل را تعریف کند.
تلاش دوباره به شناسهٔ پایدار نیاز دارد
ممکن است سرور پیام را ثبت کند اما پاسخ تأیید به فرستنده نرسد. اگر تلاش دوباره شناسهٔ تازه بگیرد، پیام تکراری ساخته میشود. برای یک ارسال منطقی شناسهٔ همانی پایدار بگذارید و در تلاش دوباره همان نتیجهٔ ثبتشده را بازگردانید. «در صف محلی»، «پذیرفتهشده در سرور» و «تحویلشده به گیرنده» نیز وضعیتهای جدا هستند.
لیوارا چت تحویل Socket.IO پایدار، توالی هر کاربر برای بازیابی پس از اتصال و صف خروجی پایدار کلاینت را مستند میکند. محدودهٔ این طرح به معنای ترتیب جهانی همهٔ رویدادها یا شاهد پایدار بودن وضعیت حضور نیست.
آزمونهای شکست که ارزش اجرا دارند
قطع ارتباط پیش از ثبت، پس از ثبت و پیش از تأیید، میان دو رویداد پیدرپی و هنگام راهاندازی دوبارهٔ دستگاه را آزمایش کنید. ارسال تکراری، رسیدن بیترتیب، پایان تاریخچهٔ نشانگر و خروج از حساب را هم بسنجید. اتصال دوباره باید بازهٔ دقیق را بازگرداند یا آشکارا همگامسازی تازه بخواهد؛ شکاف خاموش خطای اصلی است.
منابع و مطالعه بیشتر
پرسشهای رایج
آیا وبسوکت برای پیامرسانی بلادرنگ مطمئن کافی است؟
خیر. اتصال زنده تأخیر را کم میکند؛ ثبت پایدار، شناسهٔ همانی و قرارداد بازیابی شکاف برای زمان قطع اتصال لازماند.
اگر پس از رویداد ۴۱، رویداد ۴۴ برسد چه کنیم؟
در محدودهٔ توالی مستند، ۴۲ و ۴۳ را پیش از ۴۴ بگیرید و اعمال کنید؛ اگر تاریخچه پایان یافته، همگامسازی تعریفشده انجام دهید.
