𝗕𝗲𝘆𝗼𝗻𝗱 𝗛𝗧𝗧𝗣 𝗶𝗻 𝗥𝘂𝘀𝘁: 𝗥𝗲𝗮𝗹-𝗧𝗶𝗺𝗲 𝗦𝗼𝗰𝗸𝗲𝘁𝘀 𝗮𝗻𝗱 𝗙𝗧𝗣

മിക്ക ജോലികൾക്കും HTTP മികച്ചതാണ്. എന്നാൽ രണ്ട് പ്രത്യേക കാര്യങ്ങളിൽ അത് പിന്നിലാവുന്നു.

  1. റിയൽ-ടൈം പുഷ് (Real-time push). എന്തെങ്കിലും സംഭവിക്കുമ്പോൾ അത് ഉടൻ തന്നെ ബ്രൗസറുകൾ അറിയേണ്ടതുണ്ട്. Raw WebSockets ഉപയോഗിക്കാം, പക്ഷേ റീകണക്ഷൻ (reconnection), റൂട്ടിംഗ് (routing) എന്നിവയ്ക്കുള്ള എല്ലാ ലോജിക്കും നിങ്ങൾ തന്നെ എഴുതേണ്ടി വരും. JavaScript ഡെവലപ്പർമാരുടെ സ്റ്റാൻഡേർഡ് Socket.IO ആണ്, എന്നാൽ Rust-ൽ അടുത്ത കാലം വരെ ഇതിന് അനുയോജ്യമായ ഒരു സെർവർ ഇംപ്ലിമെന്റേഷൻ ഇല്ലായിരുന്നു.

  2. FTP വഴിയുള്ള ഫയൽ കൈമാറ്റം. പഴയ സിസ്റ്റങ്ങളും (Legacy systems) മീഡിയ പൈപ്പ്‌ലൈനുകളും എല്ലായിടത്തും FTP ഉപയോഗിക്കുന്നു. Rust async ഇക്കോസിസ്റ്റത്തിൽ കുറെക്കാലമായി ഈ ഒരു കുറവുണ്ടായിരുന്നു.

ഈ കുറവുകൾ എങ്ങനെ പരിഹരിക്കാമെന്ന് ഈ പോസ്റ്റ് കാണിച്ചുതരുന്നു. നമ്മൾ ഒരു Socket.IO സെർവറും ഒരു FTP സെർവറും നിർമ്മിക്കുന്നു. തുടർന്ന് അവയെ തമ്മിൽ ബന്ധിപ്പിക്കുന്നു. FTP വഴി ഒരു ഫയൽ അപ്‌ലോഡ് ചെയ്യുമ്പോൾ, കണക്ട് ചെയ്തിട്ടുള്ള എല്ലാ ബ്രൗസറുകളിലേക്കും സിസ്റ്റം ഉടൻ തന്നെ അറിയിപ്പ് നൽകുന്നു.

നമ്മൾ ഉപയോഗിക്കുന്ന ടൂളുകൾ:

• Socketioxide: Socket.IO-യുടെ Rust ഇംപ്ലിമെന്റേഷൻ. ഇത് Node.js അല്ലെങ്കിൽ Python പോലുള്ള ഏത് Socket.IO ക്ലയന്റും ഉപയോഗിച്ച് പ്രവർത്തിക്കും. • Libunftp: കോമ്പോസിബിൾ (composable) FTP സെർവറുകൾ നിർമ്മിക്കാനുള്ള ഒരു ടൂൾ. • Suppaftp: Rust-ന് വേണ്ടിയുള്ള ഒരു async FTP ക്ലയന്റ്.

പ്രധാന സവിശേഷതകൾ:

പ്രവർത്തന രീതി (Workflow):

  1. FTP ക്ലയന്റ് ഒരു ഫയൽ FTP സെർവറിലേക്ക് അപ്‌ലോഡ് ചെയ്യുന്നു.
  2. FTP സെർവർ ഒരു ബ്രോഡ്കാസ്റ്റ് ഇവന്റ് (broadcast event) ട്രിഗർ ചെയ്യുന്നു.
  3. Socket.IO സെർവർ ആ ഇവന്റ് സ്വീകരിക്കുന്നു.
  4. Socket.IO സെർവർ ബ്രൗസറിലേക്ക് ഒരു "file_uploaded" ഇവന്റ് അയക്കുന്നു.

ഈ രീതി ഫയലുകൾക്ക് വേണ്ടി മാത്രമല്ല ഉപയോഗിക്കാവുന്നത്. ജോബ് കംപ്ലീഷൻ അലേർട്ടുകൾ (job completion alerts), ലൈവ് ഡാറ്റ അപ്‌ഡേറ്റുകൾ, അല്ലെങ്കിൽ ഡെപ്ലോയ്‌മെന്റ് ഡാഷ്‌ബോർഡുകൾ എന്നിവയ്ക്കും ഇത് ഉപയോഗിക്കാം.

പൂർണ്ണമായ കോഡ് GitHub-ൽ ലഭ്യമാണ്.

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