𝗦𝗶𝗺𝗽𝗹𝗲 𝗟𝗶𝘃𝗲 𝗖𝗵𝗮𝘁 𝗔𝗹𝗺𝗼𝘀𝘁 𝗦𝗮𝗻𝗸 𝗧𝗵𝗶𝘀 𝗥𝗲𝗹𝗲𝗮𝘀𝗲

एका साध्या लाइव्ह चॅट सिस्टममुळे माझे नवीनतम रिलीज जवळपास खराब झाले होते.

हे ऐकायला सोपे वाटते. तुम्ही जवळचे वापरकर्ते दाखवता आणि त्यांना बोलू देता. पण तांत्रिक वास्तव खूप कठीण आहे. मला लाइव्ह चॅटला geolocation आणि रेटिंग सिस्टमशी जोडावे लागले. यामुळे अंतर्गत पातळीवर प्रचंड गुंतागुंत निर्माण झाली.

The Architecture:

• Frontend: React आणि TypeScript. • Backend: Node.js सह Express आणि WebSockets. • Database: वापरकर्ते आणि रेटिंगसाठी PostgreSQL. • Cache: सक्रिय सेशन्स आणि प्रेझन्ससाठी Redis.

The Geolocation Problem

लोकेशननुसार वापरकर्त्यांना मॅच करणे सोपे नाही. मला अनेक edge cases हाताळावे लागले:

  • अक्षांश (latitude) आणि रेखांश (longitude) साठवणे.
  • अंतर शोधण्यासाठी (query) Postgres extensions वापरणे.
  • लोकेशन परवानग्या नाकारणाऱ्या वापरकर्त्यांना हाताळणे.
  • ॲप न उघडता वापरकर्ता हलल्यास जुना (stale) डेटा व्यवस्थापित करणे.

जर मी हे पुन्हा केले, तर मी लोकेशन कलेक्शन आणि मॅचिंग या दोन वेगवेगळ्या सेवांमध्ये विभागले असते.

The Live Chat Reality

WebSockets रिअल-टाइम फीचर्स आणतात, पण ते गोंधळही निर्माण करतात. मी वेगवेगळ्या सर्व्हरवर मेसेज पाठवण्यासाठी Redis pub/sub वापरले.

सर्वात कठीण भाग हे होते:

  • वापरकर्ते अनपेक्षितपणे डिस्कनेक्ट झाल्यावर कनेक्शन साफ करणे (cleaning up).
  • वापरकर्त्याने सोडलेल्या रूममध्ये मेसेज जाण्यापासून रोखणे.
  • 'ghost sessions' न तयार करता रीकनेक्ट हाताळणे.

मला समजले की साध्या flags वापरण्यापेक्षा औपचारिक state machine वापरणे अधिक चांगले आहे.

The Rating System

रेटिंग्स बनवण्यापूर्वी ते साधे वाटतात. मला खालील गोष्टी सुनिश्चित कराव्या लागल्या:

  • वापरकर्ते एकाच सेशनला दोनदा रेटिंग देऊ शकत नाहीत.
  • प्रोफाइल व्ह्यूसाठी रेटिंग्स वेगाने एकत्रित (aggregate) होणे.
  • ॲपमध्ये डेटा सुसंगत (consistent) राहणे.

डुप्लिकेट्स रोखण्यासाठी मी session IDs वर unique constraints वापरले आणि परफॉर्मन्स सुधारण्यासाठी सरासरी (averages) कॅश (cache) केली.

Lessons Learned

जर मी आज हे पुन्हा बनवले, तर मी तीन गोष्टी बदलेन:

  1. मॅचिंग आणि चॅट वेगवेगळ्या मॉड्यूल्समध्ये विभागणे.
  2. WebSocket कनेक्शन स्टेट्ससाठी स्पष्ट मॉडेलिंग वापरणे.
  3. पहिल्या दिवसापासून चॅट आणि मॅचिंगसाठी अधिक चांगले logs आणि metrics जोडणे.

सॉफ्टवेअर बनवणे म्हणजे लहान निर्णयांची मालिका आहे. हे निर्णय तुमचे सिस्टम स्वच्छ (clean) असेल की ठिसूळ (brittle) हे ठरवतात.

तुम्ही कधी लाइव्ह चॅट किंवा मॅचिंग सिस्टम बनवली आहे का? तुम्ही काय वेगळे केले असते?

Source: https://dev.to/jaeger974/simple-live-chat-almost-sank-this-release-2pn7