𝗪𝗲𝗯𝗦𝗼𝗰𝗸𝗲𝘁 𝗮𝗻𝗱 𝗦𝗦𝗘 𝗶𝗻 𝗛𝘆𝗽𝗲𝗿𝗹𝗮𝗻𝗲

ആധുനിക ആപ്പുകൾക്ക് റിയൽ-ടൈം ഡാറ്റ അത്യാവശ്യമാണ്. ചാറ്റ്, ലൈവ് ഡാഷ്‌ബോർഡുകൾ, നോട്ടിഫിക്കേഷനുകൾ എന്നിവയ്ക്കായി ഇത് ആവശ്യമാണ്.

Hyperlane എന്നത് വേഗതയേറിയ ഒരു Rust HTTP സെർവർ ലൈബ്രറിയാണ്. റിയൽ-ടൈം ഡാറ്റ അയക്കുന്നതിന് ഇത് പ്രധാനമായും രണ്ട് രീതികൾ പിന്തുണയ്ക്കുന്നു: WebSocket, Server-Sent Events (SSE).

WebSocket vs SSE

WebSocket എന്നത് ബൈഡയറക്ഷണൽ (bidirectional) ആണ്. ക്ലയന്റും സെർവറും ഏത് സമയത്തും സന്ദേശങ്ങൾ അയക്കാൻ ഇതിലൂടെ സാധിക്കും. ഇത് ഒരു സിംഗിൾ TCP കണക്ഷൻ ഉപയോഗിക്കുന്നു. ചാറ്റ് ആപ്പുകൾക്കോ ഓൺലൈൻ ഗെയിമുകൾക്കോ വേണ്ടി ഇത് ഉപയോഗിക്കാം.

SSE എന്നത് യൂണിഡയറക്ഷണൽ (unidirectional) ആണ്. സെർവർ മാത്രമേ ക്ലയന്റിലേക്ക് ഡാറ്റ അയക്കുന്നുള്ളൂ. ഇത് സ്റ്റാൻഡേർഡ് HTTP ഉപയോഗിക്കുന്നു. ന്യൂസ് ഫീഡുകൾക്കോ സ്റ്റോക്ക് ടിിക്കറുകൾക്കോ വേണ്ടി ഇത് ഉപയോഗിക്കാം.

WebSocket in Hyperlane

WebSocket ഉപയോഗിക്കുന്നത് എളുപ്പമാക്കാൻ Hyperlane അറ്റ്രിബ്യൂട്ട് മാക്രോകൾ (attribute macros) ഉപയോഗിക്കുന്നു.

  • ഒരു WebSocket റിക്വസ്റ്റ് തിരിച്ചറിയാൻ #[is_ws_upgrade_type] ഉപയോഗിക്കുക.
  • ഡാറ്റ ലഭിക്കാൻ #[try_get_websocket_request] ഉപയോഗിക്കുക.

ലളിതമായ കമാൻഡുകളിലൂടെ നിങ്ങൾക്ക് കണക്ഷൻ ലൈഫ് സൈക്കിൾ നിയന്ത്രിക്കാം. ഇൻഡിവിജ്വൽ ഫ്രെയിമുകളോ (individual frames) ഫ്രെയിമുകളുടെ ലിസ്റ്റുകളോ നിങ്ങൾക്ക് അയക്കാൻ കഴിയും. ഒരേസമയം നിരവധി ഉപയോക്താക്കൾക്ക് സന്ദേശങ്ങൾ അയക്കാൻ hyperlane-broadcast പോലുള്ള ടൂളുകളും ഉപയോഗിക്കാം.

SSE in Hyperlane

SSE സെറ്റപ്പ് ചെയ്യുന്നത് കൂടുതൽ ലളിതമാണ്. Content-Type: text/event-stream എന്ന ഒരു ഹെഡർ മാത്രം സെറ്റ് ചെയ്താൽ മതി.

ബ്രൗസർ തന്നെ ഓട്ടോമാറ്റിക്കായി റീകണക്ഷൻ കൈകാര്യം ചെയ്യും. ഇത് ലളിതമായ ഡാറ്റാ സ്ട്രീമുകൾക്ക് വളരെ വിശ്വസനീയമാക്കുന്നു. ഓരോ സന്ദേശവും data: <message> എന്ന ലളിതമായ ടെക്സ്റ്റ് ഫോർമാറ്റ് പിന്തുടരുന്നു.

Quick Comparison

• ദിശ (Direction): WebSocket രണ്ട് വശത്തേക്കും (two-way) ആണ്. SSE സെർവർ-ടു-ക്ലയന്റ് (server-to-client) മാത്രമാണ്. • പ്രോട്ടോക്കോൾ (Protocol): WebSocket ws:// ഉപയോഗിക്കുന്നു. SSE സ്റ്റാൻഡേർഡ് HTTP ഉപയോഗിക്കുന്നു. • റീകണക്ഷൻ (Reconnection): WebSocket റീകണക്ഷനുകൾ നിങ്ങൾ തന്നെ മാനുവലായി കൈകാര്യം ചെയ്യണം. SSE-യുടെ കാര്യത്തിൽ ബ്രൗസറുകൾ ഇത് ചെയ്തോളും. • ഡാറ്റാ ടൈപ്പ് (Data Type): WebSocket ബൈനറി ഡാറ്റ പിന്തുണയ്ക്കുന്നു. SSE ടെക്സ്റ്റ് മാത്രമേ പിന്തുണയ്ക്കൂ. • സങ്കീർണ്ണത (Complexity): WebSocket നിർമ്മിക്കുന്നത് കൂടുതൽ പ്രയാസമാണ്. SSE എളുപ്പമാണ്.

കുറഞ്ഞ ലേറ്റൻസിയും (low latency) രണ്ട് വശത്തേക്കും ആശയവിനിമയം നടത്താനുള്ള സൗകര്യവും വേണമെങ്കിൽ WebSocket തിരഞ്ഞെടുക്കുക. ഉപയോക്താക്കളിലേക്ക് അപ്‌ഡേറ്റുകൾ എത്തിക്കാൻ ലളിതമായ ഒരു മാർഗ്ഗം വേണമെങ്കിൽ SSE തിരഞ്ഞെടുക്കുക.

Rust-ൽ ഇവ രണ്ടും കാര്യക്ഷമമായി നിർമ്മിക്കാൻ ആവശ്യമായ ടൂളുകൾ Hyperlane നൽകുന്നു.

Project Code: https://github.com/hyperlane-dev/hyperlane

Source: https://dev.to/tengxgfyrz67s/websocket-and-sse-1867