.NET 𝗦𝗲𝗿𝘃𝗲𝗿 𝗦𝗶𝗱𝗲 𝗘𝘃𝗲𝗻𝘁𝘀 𝘄𝗶𝘁𝗵 𝗠𝗼𝗻𝗴𝗼𝗗𝗕 𝗖𝗵𝗮𝗻𝗴𝗲 𝗦𝘁𝗿𝗲𝗮𝗺𝘀
אתם רוצים עדכונים בזמן אמת ב-ASP.NET Core. אולי הדבר הראשון שיעלה לכם בראש הוא WebSockets.
יש דרך פשוטה יותר עבור דאשבורדים ופידים. ניתן להשתמש ב-MongoDB Change Streams וב-Server-Sent Events (SSE).
הגדרה זו מספקת סטרימינג חד-כיווני מהשרת שלכם ללקוח (client) עם מעט מאוד קוד.
איך זה עובד:
- MongoDB Change Streams מזהים שינויים במסד הנתונים באופן מיידי.
- SSE דוחף את השינויים הללו לדפדפן דרך חיבור HTTP יחיד.
- אתם נמנעים מ-polling קבוע, מה שחוסך במשאבי שרת.
SSE הוא API מובנה של הדפדפן. הוא עובד באמצעות תגובת HTTP ארוכת טווח ותומך בחיבור מחדש (reconnects) אוטומטי. הוא מושלם עבור:
- ציר זמן חי (Live timelines)
- התראות
- פידים של פעילות
- דאשבורדים למנהל מערכת
ב-ASP.NET Core Minimal APIs, ניתן לממש זאת באמצעות TypedResults.ServerSentEvents.
זרימת הקוד פועלת לפי השלבים הבאים:
- האפליקציה שלכם פותחת cursor של change stream ב-MongoDB.
- MongoDB משחררת אירועים (events) כאשר הנתונים משתנים.
- האפליקציה שלכם ממפה את השינויים הללו ללקוח.
יתרון מרכזי אחד הוא היכולת להמשיך סטרימים (resume streams). MongoDB מספקת resume token עבור כל שינוי. ניתן להעביר את ה-token הזה דרך ה-header Last-Event-ID. כאשר דפדפן מתחבר מחדש, הוא שולח את ה-ID האחרון שהוא ראה. האפליקציה שלכם קוראת את ה-ID הזה ואומרת ל-MongoDB להתחיל בדיוק מהנקודה שבה היא הפסיקה.
מתי כדאי להשתמש ב-SSE לעומת SignalR?
השתמשו ב-SSE אם:
- אתם זקוקים רק לעדכונים משרת ללקוח.
- אתם רוצים הגדרה קלה (lightweight) מבוססת טקסט.
- אתם רוצים להשתמש ב-APIs מובנים של הדפדפן.
השתמשו ב-SignalR אם:
- אתם זקוקים לתקשורת דו-כיוונית (bi-directional).
- אתם זקוקים לתכונות מורכבות כמו קבוצות (groups) או hubs.
- אתם זקוקים למשא ומתן אוטומטי על אמצעי התקשורת (WebSockets, Long Polling).
התחילו עם SSE עבור פידים חיים פשוטים. עברו ל-SignalR רק כאשר האפליקציה שלכם דורשת אינטראקציה עשירה יותר.
הערה: MongoDB Change Streams דורשים replica set או sharded cluster. הם אינם עובדים על שרת standalone.
מקור: https://dev.to/mongodb/net-server-side-events-with-mongodb-change-streams-5dfb
קהילת למידה אופציונלית: https://t.me/GyaanSetuAi