Node.js के लिए WebSocket लाइब्रेरीज़: सरल चैट से लेकर उच्च-लोड real-time सिस्टम तक
WebSocket एक प्रोटोकॉल है जो क्लाइंट और सर्वर के बीच स्थायी द्विदिश कनेक्शन प्रदान करता है। HTTP के विपरीत, जहाँ अनुरोध-प्रतिक्रिया क्लाइंट द्वारा शुरू की जाती है, WebSocket सर्वर को किसी भी समय डेटा भेजने की अनुमति देता है। Node.js के लिए, जो अपनी अतुल्यकालिकता और event-driven आर्किटेक्चर के लिए प्रसिद्ध है, WebSocket चैट, ऑनलाइन गेम, ट्रेडिंग टर्मिनल और स्ट्रीमिंग डेटा ट्रांसमिशन बनाने के लिए एक स्वाभाविक विकल्प बन गया है।
इस लेख में, हम तीन मुख्य लाइब्रेरीज़ पर चर्चा करेंगे: ws (हल्की और तेज़), Socket.IO (सुविधाजनक fallback तंत्र के साथ) और uWebSockets.js (रिकॉर्ड प्रदर्शन)। आप जानेंगे कि अपने कार्य के लिए किसे चुनना है और उनमें से प्रत्येक पर एक सरल चैट कैसे लिखनी है।
1. ws लाइब्रेरी — न्यूनतमता और गति
ws Node.js के लिए सबसे लोकप्रिय WebSocket लाइब्रेरी है। यह बिना किसी अतिरिक्त ओवरले के शुद्ध RFC 6455 प्रोटोकॉल को लागू करती है। मुख्य लाभ:
- अधिकतम प्रदर्शन — एक कोर पर 200,000+ संदेश/सेकंड तक।
- शून्य निर्भरताएँ — केवल शुद्ध JavaScript।
- कनेक्शन पर पूर्ण नियंत्रण: हैंडशेक, फ्रेम, ping/pong।
- बाइनरी डेटा के लिए Node.js Buffer और Streams का समर्थन।
नुकसान: कोई स्वचालित पुनः कनेक्शन नहीं, कोई कमरे (rooms) नहीं, HTTP long-polling पर कोई fallback नहीं। सब कुछ मैन्युअल रूप से या अतिरिक्त पैकेजों के माध्यम से लागू करना होगा।
उदाहरण: ws पर एक सरल इको सर्वर
const WebSocket = require('ws');
const server = new WebSocket.Server({ port: 8080 });
server.on('connection', (ws) => { console.log('क्लाइंट कनेक्ट हुआ');
ws.on('message', (message) => { console.log('प्राप्त हुआ:', message.toString()); // वापस भेजें (इको) ws.send(`इको: ${message}`); });
ws.on('close', () => { console.log('क्लाइंट डिस्कनेक्ट हुआ'); });
// कनेक्ट होने पर स्वागत संदेश भेजें ws.send('WebSocket सर्वर में आपका स्वागत है!');});
console.log('सर्वर ws://localhost:8080 पर शुरू हुआ');ws कब चुनें? — माइक्रोसर्विसेज़, उच्च-लोड गेम (जहाँ हर फ्रेम मायने रखता है), अपने स्वयं के HTTP सर्वर में एम्बेड करने के लिए (server.on('upgrade') के माध्यम से)।
2. Socket.IO — प्रोडक्शन के लिए सुविधा और विश्वसनीयता
Socket.IO केवल WebSocket नहीं है, बल्कि एक संपूर्ण real-time प्लेटफ़ॉर्म है। यह मुख्य ट्रांसपोर्ट के रूप में WebSocket का उपयोग करता है, लेकिन यदि WebSocket समर्थित नहीं है (प्रॉक्सी, फ़ायरवॉल, पुराने ब्राउज़र) तो स्वचालित रूप से HTTP long-polling पर स्विच हो जाता है।
- कमरे (Rooms) — ब्रॉडकास्ट के लिए क्लाइंट का समूहीकरण।
- नाम स्थान (Namespaces) — एप्लिकेशन का तार्किक विभाजन (उदाहरण के लिए, /chat और /game)।
- स्वचालित पुनः कनेक्शन एक्सपोनेंशियल बैकऑफ़ के साथ।
- ईवेंट समर्थन — आप कच्चे संदेशों के बजाय ईवेंट के साथ काम करते हैं।
- अंतर्निहित सीरियलाइज़ेशन — मैन्युअल पार्सिंग के बिना JSON ऑब्जेक्ट का स्थानांतरण।
नुकसान: प्रोटोकॉल पर ओवरहेड (मेटाडेटा के साथ अतिरिक्त पैकेट), अधिक निर्भरताएँ, शुद्ध ws की तुलना में थोड़ा धीमा।
उदाहरण: Socket.IO पर कमरों के साथ चैट (सर्वर)
const http = require('http');const { Server } = require('socket.io');
const server = http.createServer();const io = new Server(server, { cors: { origin: '*' } // डेवलपमेंट के लिए});
io.on('connection', (socket) => { console.log('नया क्लाइंट:', socket.id);
// कमरे में शामिल होना socket.on('join_room', (roomName) => { socket.join(roomName); socket.emit('message', `आप कमरे ${roomName} में शामिल हो गए`); socket.to(roomName).emit('message', `उपयोगकर्ता ${socket.id} कमरे में आया`); });
// कमरे में संदेश भेजना