درک رویدادهای ارسال‌شده توسط سرور (Server Sent Events)

تصور کنید از ChatGPT استفاده می‌کنید. سوالی می‌پرسید. به جای اینکه کلمات را یکی‌یکی ظاهر شدن ببینید، ۵ ثانیه منتظر می‌مانید تا کل پاسخ یک‌باره ظاهر شود.

این تأخیر، کند و کلافه‌کننده به نظر می‌رسد.

برای حل این مشکل، توسعه‌دهندگان از پاسخ‌های جریانی (streaming responses) استفاده می‌کنند. این کار باعث می‌شود تجربه کاربری سریع به نظر برسد.

رویدادهای ارسال‌شده توسط سرور (SSE) این امکان را فراهم می‌کنند.

SSE چیست؟

SSE استانداردی برای ارسال جریانی داده‌ها از سرور به کلاینت از طریق HTTP است. این استاندارد به سرور اجازه می‌دهد تا به‌روزرسانی‌ها را به‌صورت آنی (real time) به شما ارسال کند.

نحوه عملکرد:

سرور بلوک‌های متنی کوچکی را ارسال می‌کند. این بلوک‌ها از فیلدهایی مانند data ،event ،id و retry استفاده می‌کنند. هر بلوک با یک خط خالی از بلوک بعدی جدا می‌شود.

مثال: data: {"name": "Portal Gun", "price": 999.99}

کاربردهای رایج SSE:

  • استریم کردن چت‌های هوش مصنوعی
  • اعلان‌های زنده
  • لاگ‌های آنی (Real time logs)
  • مشاهده‌پذیری سیستم (System observability)

پیش از SSE، توسعه‌دهندگان از دو روش اصلی برای دریافت به‌روزرسانی‌ها استفاده می‌کردند:

  1. Short polling کلاینت از سرور درخواست داده می‌کند. اگر داده آماده نباشد، سرور یک پیام انتظار ارسال می‌کند. کلاینت منتظر می‌ماند و دوباره درخواست می‌دهد. این فرآیند تا زمانی که کار تمام شود تکرار می‌شود.

  2. Long polling کلاینت از سرور درخواست داده می‌کند. سرور درخواست را باز نگه می‌دارد تا زمانی که داده آماده شود یا زمان انتظار (timeout) به پایان برسد. کلاینت باید بلافاصله پس از دریافت پاسخ، درخواست را دوباره شروع کند.

جریان‌های رویداد (Event streams) فرآیندهای مداوم را مدیریت می‌کنند. این فرآیندها از ترتیب مشخصی پیروی می‌کنند. این شامل وظایف ساده‌ای مانند ایجاد یک PDF یا وظایف پیچیده‌ای مانند تراکنش‌های بانکی می‌شود.

سرور یک کانال ارتباطی با کلاینت باز می‌کند و این کانال را تا پایان فرآیند باز نگه می‌دارد.

منبع: https://dev.to/rishini_dharan_t/understanding-server-sent-events-3mkd