اغلب وقتی میخوایم دیتای زنده از سرور به کلاینت بفرستیم (مثل نوتیفیکیشن، قیمت لحظهای ارز یا وضعیت یه پردازش طولانی)، اولین فکرمون میره سراغ WebSockets.
اما WebSockets یه پروتکل دوطرفه و پیچیدهست. خیلی وقتها ما فقط نیاز داریم سرور یکطرفه به کلاینت دیتا «پوش» کنه.
اینجا SSE (Server-Sent Events) وارد میشه. SSE بر پایه HTTP کار میکنه، سبکه و پیادهسازیش خیلی سادهتره.
در ASP.NET Core 10، پشتیبانی از SSE داخلی شده:
مثال (سمت سرور - C#):
app.MapGet("/live-clock", async (HttpContext context, CancellationToken ct) =>
{
// به مرورگر میگیم که این یه استریم SSE هست
await context.Response.WriteSseHeadersAsync(ct);
// یه حلقه که هر ثانیه، زمان سرور رو برای کلاینت میفرسته
while (!ct.IsCancellationRequested)
DRAFT:
{
// یه "ایونت" به اسم 'timeUpdate' میفرستیم
await context.Response.WriteSseEventAsync(
"timeUpdate", // اسم ایونت
$"ساعت سرور: {DateTime.Now:T}", // دیتا
ct);
await Task.Delay(1000, ct); // ۱ ثانیه صبر کن
}
});
مثال (سمت کلاینت - JavaScript):
// به همین سادگی به سرور وصل میشیم
const eventSource = new EventSource("/live-clock");
// به ایونت 'timeUpdate' گوش میدیم
eventSource.addEventListener("timeUpdate", (event) => {
console.log(event.data);
// خروجی: "ساعت سرور: 14:30:01"
// خروجی: "ساعت سرور: 14:30:02"
// ...
});🎺برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامهنویسی، به کانال ما بپیوندید!
📚💻 @dotnetcode 🖥👨💻