𝗦𝗲𝘁𝘁𝗶𝗻𝗴 𝗨𝗽 𝗦𝗼𝗰𝗸𝗲𝘁.𝗶𝗼

മിക്ക വെബ് ആപ്പുകളും HTTP ആണ് ഉപയോഗിക്കുന്നത്. ഇതിന്റെ പ്രവർത്തനരീതി ലളിതമായ ഒരു പാറ്റേൺ പിന്തുടരുന്നു:

ക്ലയന്റ് ഒരു റിക്വസ്റ്റ് അയക്കുന്നു. സെർവർ ഒരു റെസ്‌പോൺസ് അയക്കുന്നു. കണക്ഷൻ അവസാനിക്കുന്നു.

ഓതന്റിക്കേഷനോ ഡാറ്റ എടുക്കുന്നതിനോ ഇത് അനുയോജ്യമാണ്. എന്നാൽ ഒരു റിക്വസ്റ്റ് ഇല്ലാതെ തന്നെ സെർവർക്ക് ഡാറ്റ അയക്കേണ്ടി വരുമ്പോൾ ഇത് പരാജയപ്പെടുന്നു.

ഒരു ടീം അംഗം ഒരു ടാസ്ക് അപ്‌ഡേറ്റ് ചെയ്യുകയോ സ്റ്റാറ്റസ് മാറുകയോ ചെയ്താൽ, "പുതിയ ഡാറ്റ ഉണ്ടോ?" എന്ന് ബ്രൗസർ ആവർത്തിച്ച് ചോദിക്കാൻ HTTP നിർബന്ധിക്കുന്നു. ഇതിനെ 'polling' എന്ന് വിളിക്കുന്നു. ഇത് റിസോഴ്സുകൾ പാഴാക്കുന്നു.

Socket.io ഇത് പരിഹരിക്കുന്നു. ഇത് ഒരു പെർസിസ്റ്റന്റ് (persistent) കണക്ഷൻ ഉണ്ടാക്കുന്നു. ഈ കണക്ഷൻ എപ്പോഴും നിലനിൽക്കുന്നു.

ആശയവിനിമയം ഇരുവശത്തേക്കും (two-way) ആകുന്നു: ക്ലയന്റ് ↔ സെർവർ

ക്ലയന്റ് ഡാറ്റ അയക്കുന്നു. സെർവർ ഡാറ്റ അയക്കുന്നു. ഇത് റിയൽ-ടൈം ആപ്പുകൾ സാധ്യമാക്കുന്നു.

Express-ലേക്ക് നേരിട്ട് Socket.io ഘടിപ്പിക്കാൻ ശ്രമിക്കുന്നത് ഒരു സാധാരണ തെറ്റാണ്. Express അതിന്റെ പിന്നിലുള്ള HTTP സെർവറിനെ മറച്ചുവെക്കുന്നു. Socket.io-യ്ക്ക് ആ സെർവറിലേക്ക് നേരിട്ട് പ്രവേശനം ആവശ്യമാണ്.

പകരം ഇത് ചെയ്യുക:

  1. നിങ്ങളുടെ Express ആപ്പ് ഉപയോഗിച്ച് സെർവർ നിർമ്മിക്കുക.
  2. ആ സെർവറിലേക്ക് Socket.io ഘടിപ്പിക്കുക.
  3. പോർട്ടിൽ ലിസൺ (listen) ചെയ്യാൻ തുടങ്ങുക.

Socket.io രണ്ട് മെത്തേഡുകളെ ആശ്രയിച്ചിരിക്കുന്നു:

• socket.emit(): ഒരു ഇവന്റ് അയക്കുന്നു. • socket.on(): ഒരു ഇവന്റിനായി കാത്തിരിക്കുന്നു.

'Rooms' Socket.io-യെ കൂടുതൽ കാര്യക്ഷമമാക്കുന്നു. ഇവയെ വാക്കി-ടോക്കി ചാനലുകൾ പോലെ കരുതുക. നിങ്ങൾക്ക് ഉപയോക്താക്കളെ പ്രത്യേക പ്രോജക്റ്റ് റൂമുകളിലേക്ക് ഗ്രൂപ്പ് ചെയ്യാം.

ഒരു ഉപയോക്താവ് ഒരു പ്രോജക്റ്റ് തുറക്കുമ്പോൾ, അവർ ഒരു റൂമിൽ ചേരുന്നു. ഒരു അപ്‌ഡേറ്റ് നടക്കുമ്പോൾ, ആ പ്രത്യേക റൂമിലേക്ക് മാത്രം നിങ്ങൾ ഇവന്റ് അയക്കുന്നു. ഇത് ആവശ്യമില്ലാത്ത ഉപയോക്താക്കൾക്ക് ഡാറ്റ അയക്കുന്നത് ഒഴിവാക്കുന്നു.

ശരിയായ രീതിയിലുള്ള ഇംപ്ലിമെന്റേഷൻ പ്രധാനമാണ്. ബിസിനസ് ലോജിക് (business logic) Socket.io ഹാൻഡ്‌ലറുകൾക്കുള്ളിൽ നൽകരുത്. അത് നിങ്ങളുടെ റൂട്ട് ഹാൻഡ്‌ലറുകളിൽ (route handlers) നൽകുക.

ശരിയായ രീതി ഇതാണ്:

  1. ഉപയോക്താവ് ഒരു റൂട്ടിലേക്ക് റിക്വസ്റ്റ് അയക്കുന്നു.
  2. സെർവർ ഡാറ്റാബേസ് അപ്‌ഡേറ്റ് ചെയ്യുന്നു.
  3. ഡാറ്റാബേസ് ഓപ്പറേഷൻ വിജയകരമാകുന്നു.
  4. സെർവർ Socket.io ഇവന്റ് അയക്കുന്നു.
  5. ക്ലയന്റുകൾ അവരുടെ UI അപ്‌ഡേറ്റ് ചെയ്യുന്നു.

ഡാറ്റാബേസ് മാറ്റം സ്ഥിരീകരിക്കുന്നതിന് മുമ്പ് ഒരിക്കലും ഒരു ഇവന്റ് അയക്കരുത്.

കോഡ് വൃത്തിയായി സൂക്ഷിക്കാൻ, Socket.io ഇൻസ്റ്റൻസ് Express ആപ്പിൽ തന്നെ സൂക്ഷിക്കുക. app.set("io", io) ഉപയോഗിക്കുക. ഇത് സങ്കീർണ്ണമായ ഇംപോർട്ടുകൾ ഇല്ലാതെ തന്നെ ഏത് റൂട്ടിലും ഇൻസ്റ്റൻസിലേക്ക് പ്രവേശനം നൽകുന്നു.

റിയൽ-ടൈം കമ്മ്യൂണിക്കേഷൻ എന്നാൽ പേജ് റീഫ്രഷ് ചെയ്യാതെ തന്നെ ഉപയോക്താക്കൾക്ക് അപ്‌ഡേറ്റുകൾ ഉടനടി കാണാൻ കഴിയുന്നു എന്നാണ് അർത്ഥമാക്കുന്നത്.

Source: https://dev.to/chinwuba_jeffrey/setting-up-socketio-a42