𝗕𝘂𝗶𝗹𝗱𝗶𝗻𝗴 𝗥𝗲𝗮𝗹-𝗧𝗶𝗺𝗲 𝗔𝗽𝗽𝘀 𝘄𝗶𝘁𝗵 𝗪𝗲𝗯𝗦𝗼𝗰𝗸𝗲𝘁𝘀
Polling అనేది మీ యాప్కు మంచిది కాదు.
నేను ఒకసారి AJAX polling ఉపయోగించి ఒక చాట్ విడ్జెట్ను రూపొందించాను. ప్రతి సెకనుకు కొత్త మెసేజ్ల కోసం సర్వర్ను అడగాలని నేను యాప్ను సెట్ చేశాను. అది పనిచేసింది కానీ, చాలా నెమ్మదిగా ఉంది. UI లాగ్ అవుతున్నట్లు అనిపించింది. సర్వర్ కూడా చాలా కష్టపడాల్సి వచ్చింది. చాలా రిక్వెస్ట్లు ఖాళీ డేటాను మాత్రమే ఇచ్చాయి. ఇది ఒక టీస్పూన్తో బాత్టబ్ను నింపడానికి ప్రయత్నించడంలా అనిపించింది.
WebSockets దీనిని మారుస్తాయి.
నిరంతర రిక్వెస్ట్లకు బదులుగా, మీరు ఒక పర్సిస్టెంట్ కనెక్షన్ను (persistent connection) ఓపెన్ చేస్తారు. ఇది డేటా యొక్క రెండు వైపుల ప్రవాహాన్ని (two-way flow) అనుమతిస్తుంది. సర్వర్ క్లయింట్కు డేటాను తక్షణమే పంపగలదు. క్లయింట్ సర్వర్కు డేటాను తక్షణమే పంపగలదు.
Why use WebSockets?
• Latency వందల మిల్లీసెకన్ల నుండి పదుల మిల్లీసెకన్లకు తగ్గుతుంది. • సర్వర్ లోడ్ అంచనా వేయదగినదిగా మారుతుంది. • పదేపదే వచ్చే HTTP హెడర్లను తొలగించడం ద్వారా మీరు బ్యాండ్విడ్త్ను ఆదా చేయవచ్చు. • ఇది చాట్, లైవ్ నోటిఫికేషన్లు మరియు మల్టీప్లేయర్ గేమ్లకు ఉపయోగపడుతుంది.
How it works:
కనెక్షన్ ఒక HTTP upgrade రిక్వెస్ట్తో ప్రారంభమవుతుంది. సర్వర్ అంగీకరిస్తే, అది 101 స్టేటస్ కోడ్ను పంపుతుంది. ఆ తర్వాత, మీరు రా (raw) బైనరీ లేదా టెక్స్ట్ ప్రోటోకాల్ను ఉపయోగిస్తారు. మిమ్మల్ని నెమ్మదింపజేసే కుకీలు లేదా హెడర్లు ఇక ఉండవు.
Common traps to avoid:
- Connection drops: నెట్వర్క్లు విఫలం కావచ్చు. మీరు 'exponential backoff' వంటి రీట్రై స్ట్రాటజీని అమలు చేయాలి.
- Memory leaks: యూజర్ వెళ్ళిపోయినప్పుడు ఎల్లప్పుడూ మీ సాకెట్లను క్లోజ్ చేయండి. Zombie connections సర్వర్ మెమరీని వృధా చేస్తాయి.
- Message loops: బ్రాడ్కాస్టింగ్ చేసేటప్పుడు, అసలు పంపిన వ్యక్తిని వదిలివేయండి. లేకపోతే, యూజర్ తన సొంత మెసేజ్ను రెండుసార్లు చూస్తారు.
- Idle connections: కొన్ని ప్రాక్సీలు నిశ్శబ్దంగా ఉన్న కనెక్షన్లను క్లోజ్ చేస్తాయి. సాకెట్ను యాక్టివ్గా ఉంచడానికి ping/pong heartbeatని ఉపయోగించండి.
ఏదైనా మారిందేమో అని సర్వర్ను అడగడం ఆపండి. మీకు అవసరమైనప్పుడల్లా మాట్లాడటానికి ఒక లైన్ను ఓపెన్గా ఉంచడం ప్రారంభించండి.
Your challenge:
ఒక ప్రాథమిక చాట్ ఉదాహరణను తీసుకోండి. దానికి ఒక "typing..." ఇండికేటర్ను జోడించండి. దానిని Render లేదా Fly.io వంటి హోస్ట్కు డిప్లాయ్ చేయండి. పోలింగ్ లేకుండా ఆ ఇండికేటర్ రియల్ టైమ్లో కదులుతున్నట్లు మీరు చూసినప్పుడు, మీరు తదుపరి స్థాయికి చేరుకున్నట్లు లెక్క.