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

बहुतेक वेब ॲप्स HTTP वापरतात. ही प्रक्रिया एका साध्या पॅटर्नचे अनुसरण करते:

क्लायंट एक विनंती (request) पाठवतो. सर्व्हर एक प्रतिसाद (response) पाठवतो. कनेक्शन बंद होते.

हे ऑथेंटिकेशन किंवा डेटा मिळवण्यासाठी (fetching data) उपयुक्त ठरते. परंतु, जेव्हा सर्व्हरला विनंतीशिवाय डेटा पाठवायचा असतो, तेव्हा ही पद्धत अपयशी ठरते.

जर एखाद्या सहकाऱ्याने टास्क अपडेट केला किंवा स्टेटस बदलले, तर HTTP मुळे ब्राउझरला वारंवार "नवीन डेटा आहे का?" असे विचारावे लागते. याला 'पोलिंग' (polling) म्हणतात. यामुळे संसाधनांचा (resources) अपव्यय होतो.

Socket.io याचे निराकरण करते. ते एक कायमस्वरूपी (persistent) कनेक्शन तयार करते. हे कनेक्शन सक्रिय राहते.

संवाद द्वि-मार्गी (two-way) होतो: क्लायंट ↔ सर्व्हर

क्लायंट डेटा पाठवतो. सर्व्हर डेटा पाठवतो. यामुळे रिअल-टाइम (real-time) ॲप्स शक्य होतात.

एक सामान्य चूक म्हणजे Socket.io थेट Express ला जोडण्याचा प्रयत्न करणे. Express अंतर्गत असलेला HTTP सर्व्हर लपवते. Socket.io ला त्या सर्व्हरचा थेट प्रवेश (direct access) आवश्यक असतो.

त्याऐवजी असे करा:

  1. तुमच्या Express ॲपचा वापर करून सर्व्हर तयार करा.
  2. त्या सर्व्हरला Socket.io जोडा.
  3. पोर्टवर लिसनिंग (listening) सुरू करा.

Socket.io दोन पद्धतींवर अवलंबून आहे:

socket.emit(): इव्हेंट पाठवा. • socket.on(): इव्हेंटसाठी ऐका (listen).

'रूम्स' (Rooms) मुळे Socket.io कार्यक्षम बनते. त्यांना वॉकी-टॉकी चॅनेलप्रमाणे समजा. तुम्ही वापरकर्त्यांना विशिष्ट प्रोजेक्ट रूममध्ये गटबद्ध करू शकता.

जेव्हा एखादा वापरकर्ता प्रोजेक्ट उघडतो, तेव्हा तो एका रूममध्ये सामील होतो. जेव्हा एखादा अपडेट होतो, तेव्हा तुम्ही तो इव्हेंट फक्त त्या विशिष्ट रूममध्ये पाठवता (emit करता). यामुळे ज्या वापरकर्त्यांना त्याची गरज नाही, त्यांना डेटा पाठवणे टाळता येते.

योग्य अंमलबजावणी (implementation) महत्त्वाची आहे. Socket.io हँडलरमध्ये बिझनेस लॉजिक (business logic) ठेवू नका. ते तुमच्या रूट हँडलर्समध्ये (route handlers) ठेवा.

योग्य प्रवाह (flow) असा आहे:

  1. वापरकर्ता एका रूटला विनंती पाठवतो.
  2. सर्व्हर डेटाबेस अपडेट करतो.
  3. डेटाबेस ऑपरेशन यशस्वी होते.
  4. सर्व्हर Socket.io इव्हेंट पाठवतो (emits).
  5. क्लायंट्स त्यांचे UI अपडेट करतात.

डेटाबेसने बदल निश्चित करण्यापूर्वी कधीही इव्हेंट पाठवू नका.

तुमचा कोड स्वच्छ ठेवण्यासाठी, Socket.io इन्स्टन्स Express ॲपवर स्टोअर करा. app.set("io", io) वापरा. यामुळे कोणत्याही रूटला गोंधळात टाकणाऱ्या इम्पॉर्ट्सशिवाय (imports) इन्स्टन्समध्ये प्रवेश मिळू शकतो.

रिअल-टाइम कम्युनिकेशनचा अर्थ असा आहे की वापरकर्ते पेज रिफ्रेश न करता त्वरित अपडेट पाहू शकतात.

स्रोत: https://dev.to/chinwuba_jeffrey/setting-up-socketio-a42