Zaidi ya HTTP katika Rust: Sockets za Wakati Halisi na FTP
HTTP ni nzuri kwa kazi nyingi. Lakini inafeli katika maeneo mawili mahususi.
Push ya wakati halisi (Real-time push). Kivinjari (Browsers) kinahitaji kujua jambo linapotokea mara moja. WebSockets za kawaida hufanya kazi, lakini lazima uandike mantiki yote ya kuunganisha upya (reconnection) na uelekezaji (routing) mwenyewe. Socket.IO ndio kiwango kwa watengenezaji wa JavaScript, lakini Rust ilikuwa ikikosa utekelezaji mzuri wa seva hadi hivi karibuni.
Uhamishaji wa faili kupitia FTP. Mifumo ya zamani (Legacy systems) na njia za data za vyombo vya habari (media pipelines) hutumia FTP kila mahali. Mifumo ya async ya Rust ilikuwa na pengo hapa kwa muda mrefu.
Makala haya yanakwambia jinsi ya kuziba mapengo haya. Tunatengeneza seva ya Socket.IO na seva ya FTP. Kisha tunaziunganisha. Faili linapopakiwa kupitia FTP, mfumo unatoa taarifa papo hapo kwa kila kivinjari kilichounganishwa.
Zana Tunazotumia:
• Socketioxide: Utekelezaji wa Socket.IO katika Rust. Inafanya kazi na mteja (client) wowote wa Socket.IO kama Node.js au Python. • Libunftp: Zana ya kutengeneza seva za FTP zinazoweza kuunganishwa (composable). • Suppaftp: Mteja wa async FTP kwa ajili ya Rust.
Sifa Muhimu:
- Socket.IO Rooms: Unaweza kuweka makundi ya miunganisho. Faili linapopakiwa kwenye folda maalum, unatoa taarifa kwa watumiaji walio kwenye chumba (room) hicho pekee.
- FTP Iliyodhibitiwa (Restricted FTP): Tulitengeneza kizuizi (wrapper) maalum ili kuzuia vitendo vya uharibifu. Watumiaji wanaweza kupakia na kupakua faili, lakini hawawezi kuzifuta au kuzibadilisha majina.
- Uunganishaji wa Async: Tunatumia chaneli ya utangazaji (broadcast channel) kuunganisha seva ya FTP na seva ya Socket.IO.
Mtiririko wa Kazi:
- Mteja wa FTP unapakia faili kwenye Seva ya FTP.
- Seva ya FTP huchochea tukio la utangazaji (broadcast event).
- Seva ya Socket.IO inapokea tukio hilo.
- Seva ya Socket.IO hutuma tukio la "file_uploaded" kwa kivinjari.
Mtindo huu unafanya kazi kwa zaidi ya faili pekee. Unaweza kuutumia kwa taarifa za kukamilika kwa kazi, sasisho za data za moja kwa moja, au dashibodi za utekelezaji (deployment dashboards).
Kodi kamili inapatikana kwenye GitHub.