מעבר ל-HTTP ב-Rust: Sockets בזמן אמת ו-FTP

HTTP מצוין עבור רוב המשימות. אך הוא נכשל בשני תחומים ספציפיים.

  1. דחיפה (push) בזמן אמת. דפדפנים צריכים לדעת מיד כשמשהו קורה. WebSockets גולמיים עובדים, אך עליך לכתוב בעצמך את כל הלוגיקה עבור חיבור מחדש (reconnection) וניתוב (routing). Socket.IO הוא הסטנדרט עבור מפתחי JavaScript, אך ל-Rust היה חסר מימוש שרת טוב עד לאחרונה.

  2. העברת קבצים באמצעות FTP. מערכות legacy וצינורות מדיה (media pipelines) משתמשים ב-FTP בכל מקום. באקו-סיסטם ה-async של Rust היה פער בתחום זה במשך זמן רב.

הפוסט הזה מראה לכם איך לגשר על הפערים הללו. אנחנו בונים שרת Socket.IO ושרת FTP. לאחר מכן אנחנו מחברים ביניהם. כאשר קובץ מועלה באמצעות FTP, המערכת מתריעה באופן מיידי בפני כל דפדפן מחובר.

הכלים שבהם אנו משתמשים:

• Socketioxide: המימוש של Socket.IO ב-Rust. הוא עובד עם כל לקוח Socket.IO כמו Node.js או Python. • Libunftp: כלי לבניית שרתי FTP מורכבים (composable). • Suppaftp: לקוח FTP אסינכרוני (async) עבור Rust.

תכונות עיקריות:

זרימת העבודה (Workflow):

  1. לקוח FTP מעלה קובץ לשרת ה-FTP.
  2. שרת ה-FTP מפעיל אירוע שידור (broadcast event).
  3. שרת ה-Socket.IO מקבל את האירוע.
  4. שרת ה-Socket.IO משדר (emits) אירוע "file_uploaded" לדפדפן.

התבנית הזו עובדת עבור יותר מאשר רק קבצים. ניתן להשתמש בה עבור התראות על סיום משימות, עדכוני נתונים חיים, או לוחות בקרה (dashboards) של פריסה (deployment).

הקוד המלא זמין ב-GitHub.

מקור: https://dev.to/manan_shukla_eebf35d10bbf/beyond-http-in-rust-real-time-sockets-and-ftp-built-from-scratch-3o2a