𝗕𝗲𝘆𝗼𝗻𝗱 𝗛𝗧𝗧𝗣 𝗶𝗻 𝗥𝘂𝘀𝘁: 𝗥𝗲𝗮𝗹-𝗧𝗶𝗺𝗲 𝗦𝗼𝗰𝗸𝗲𝘁𝘀 𝗮𝗻𝗱 𝗙𝗧𝗣
बहुतेक कामांसाठी HTTP उत्तम आहे. परंतु दोन विशिष्ट क्षेत्रांमध्ये ते अपुरे पडते.
१. Real-time push. काहीतरी घडल्यास ब्राउझर्सना ते त्वरित समजणे आवश्यक असते. Raw WebSockets काम करतात, परंतु तुम्हाला reconnection आणि routing साठीचे सर्व लॉजिक स्वतः लिहावे लागते. JavaScript डेव्हलपर्ससाठी Socket.IO हे मानक आहे, परंतु अलीकडेपर्यंत Rust मध्ये त्याचे चांगले server implementation उपलब्ध नव्हते.
२. FTP द्वारे फाईल ट्रान्सफर. Legacy systems आणि media pipelines मध्ये सर्वत्र FTP वापरले जाते. Rust च्या async ecosystem मध्ये बराच काळ येथे एक त्रुटी होती.
ही पोस्ट तुम्हाला या त्रुटी कशा दूर करायच्या हे दाखवते. आम्ही एक Socket.IO server आणि एक FTP server तयार करतो. त्यानंतर आम्ही त्यांना एकमेकांशी जोडतो. जेव्हा FTP द्वारे फाईल अपलोड केली जाते, तेव्हा सिस्टम त्वरित प्रत्येक कनेक्टेड ब्राउझरला सूचित करते.
आम्ही वापरलेली साधने (The Tools We Use):
• Socketioxide: Socket.IO चे Rust implementation. हे Node.js किंवा Python सारख्या कोणत्याही Socket.IO client सोबत काम करते. • Libunftp: composable FTP servers तयार करण्यासाठी एक साधन. • Suppaftp: Rust साठी एक async FTP client.
मुख्य वैशिष्ट्ये (Key Features):
- Socket.IO Rooms: तुम्ही कनेक्शन्सचे गट (groups) तयार करू शकता. जेव्हा एखाद्या विशिष्ट फोल्डरमध्ये फाईल अपलोड होते, तेव्हा तुम्ही फक्त त्या रूममधील वापरकर्त्यांना सूचित करता.
- Restricted FTP: आम्ही destructive actions रोखण्यासाठी एक custom wrapper तयार केला आहे. वापरकर्ते फाईल्स अपलोड आणि डाउनलोड करू शकतात, परंतु ते त्या डिलीट किंवा रीनेम करू शकत नाहीत.
- Async Integration: FTP server ला Socket.IO server शी जोडण्यासाठी आम्ही broadcast channel वापरतो.
कार्यप्रवाह (The Workflow):
१. FTP Client FTP Server वर फाईल अपलोड करतो. २. FTP Server एक broadcast event ट्रिगर करतो. ३. Socket.IO server ला तो event प्राप्त होतो. ४. Socket.IO server ब्राउझरला "file_uploaded" event emits करतो.
हा पॅटर्न केवळ फाईल्ससाठीच नाही तर इतर गोष्टींसाठीही वापरता येतो. तुम्ही याचा वापर job completion alerts, live data updates किंवा deployment dashboards साठी करू शकता.
संपूर्ण कोड GitHub वर उपलब्ध आहे.