Socket.io அமைத்தல்
பெரும்பாலான இணைய செயலிகள் (web apps) HTTP-ஐப் பயன்படுத்துகின்றன. இதன் செயல்முறை ஒரு எளிய முறையைப் பின்பற்றுகிறது:
- கிளையண்ட் (Client) ஒரு கோரிக்கையை (request) அனுப்புகிறது.
- சர்வர் (Server) ஒரு பதிலை (response) அனுப்புகிறது.
- இணைப்பு துண்டிக்கப்படுகிறது.
இது அங்கீகாரம் (authentication) அல்லது தரவைப் பெறுவதற்கு (fetching data) பயனுள்ளதாக இருக்கும். ஆனால், ஒரு கோரிக்கை இல்லாமலேயே சர்வர் தரவை அனுப்ப வேண்டியிருக்கும் போது இது தோல்வியடைகிறது.
ஒரு குழு உறுப்பினர் ஒரு பணியைப் புதுப்பித்தாலோ அல்லது நிலை (status) மாறினாலோ, "புதிய தரவு ஏதேனும் உள்ளதா?" என்று பிரவுசர் மீண்டும் மீண்டும் கேட்பதை HTTP செய்கிறது. இது 'polling' என்று அழைக்கப்படுகிறது. இது வளங்களை (resources) வீணாக்குகிறது.
Socket.io இதைத் தீர்க்கிறது. இது ஒரு நிலையான இணைப்பை (persistent connection) உருவாக்குகிறது. அந்த இணைப்பு தொடர்ந்து செயல்பாட்டில் இருக்கும்.
தகவல் தொடர்பு இருவழித் தொடர்பாக மாறுகிறது: Client ↔ Server
கிளையண்ட் தரவை அனுப்புகிறது. சர்வர் தரவை அனுப்புகிறது. இது நிகழ்நேர (real-time) செயலிகளைச் சாத்தியமாக்குகிறது.
ஒரு பொதுவான தவறு என்னவென்றால், Socket.io-வை நேரடியாக Express உடன் இணைக்க முயற்சிப்பதுதான். Express அதன் அடிப்படையிலுள்ள HTTP சர்வரை மறைத்துவிடுகிறது. Socket.io-விற்கு அந்த சர்வரை நேரடியாக அணுக வேண்டிய அவசியம் உள்ளது.
அதற்குப் பதிலாக இதைச் செய்யுங்கள்:
- உங்கள் Express செயலியைப் பயன்படுத்தி சர்வரை உருவாக்கவும்.
- அந்த சர்வரில் Socket.io-வை இணைக்கவும்.
- போர்ட்டில் (port) இணைப்பைக் கவனிக்கத் தொடங்கவும் (listening).
Socket.io இரண்டு முறைகளை நம்பியுள்ளது:
• socket.emit(): ஒரு நிகழ்வை (event) அனுப்ப.
• socket.on(): ஒரு நிகழ்வைக் கவனிக்க.
'Rooms' Socket.io-வை திறமையானதாக மாற்றுகின்றன. அவற்றை வாக்கி-டாக்கி (walkie-talkie) சேனல்கள் போலக் கருதலாம். பயனர்களை குறிப்பிட்ட புராஜெக்ட் ரூம்களில் (project rooms) குழுவாகப் பிரிக்கலாம்.
ஒரு பயனர் ஒரு புராஜெக்ட்டைத் திறக்கும்போது, அவர் ஒரு ரூமில் இணைகிறார். ஒரு புதுப்பிப்பு நிகழும்போது, அந்த குறிப்பிட்ட ரூமிற்கு மட்டும் நீங்கள் நிகழ்வை (event) அனுப்புகிறீர்கள். இது தேவையற்ற பயனர்களுக்குத் தரவை அனுப்புவதைத் தவிர்க்கிறது.
சரியான முறையில் செயல்படுத்துவது முக்கியம். Socket.io ஹேண்ட்லருக்குள் (handler) பிசினஸ் லாஜிக்கை (business logic) வைக்காதீர்கள். அதை உங்கள் ரூட் ஹேண்ட்லர்களில் (route handlers) வைக்கவும்.
சரியான செயல்முறை இதுதான்:
- பயனர் ஒரு ரூட்டிற்கு (route) கோரிக்கையை அனுப்புகிறார்.
- சர்வர் தரவுத்தளத்தைப் (database) புதுப்பிக்கிறது.
- தரவுத்தளச் செயல்பாடு வெற்றிகரமாக முடிகிறது.
- சர்வர் Socket.io நிகழ்வை அனுப்புகிறது.
- கிளையண்ட்கள் தங்கள் UI-ஐப் புதுப்பிக்கின்றன.
தரவுத்தளம் மாற்றத்தை உறுதிப்படுத்துவதற்கு முன்பு ஒருபோதும் நிகழ்வை (event) அனுப்பாதீர்கள்.
உங்கள் குறியீட்டை (code) சுத்தமாக வைத்திருக்க, Socket.io இன்ஸ்டன்ஸை (instance) Express செயலியில் சேமிக்கவும். app.set("io", io) என்பதைப் பயன்படுத்தவும். இது சிக்கலான இம்போர்ட்கள் (imports) இன்றி எந்தவொரு ரூட்டும் அந்த இன்ஸ்டன்ஸை அணுக அனுமதிக்கிறது.
நிகழ்நேரத் தகவல் தொடர்பு என்பது பயனர்கள் பக்கத்தைப் புதுப்பிக்காமலேயே (refresh) மாற்றங்களை உடனடியாகப் பார்ப்பதைக் குறிக்கிறது.
ஆதாரம்: https://dev.to/chinwuba_jeffrey/setting-up-socketio-a42