TypeScript पर WebSocket: रीयल-टाइम एप्लिकेशन के लिए उन्नत तकनीकें

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

TypeScript पर WebSocket: रीयल-टाइम एप्लिकेशन के लिए उन्नत तकनीकें



WebSocket क्लाइंट और सर्वर के बीच एक स्थायी द्विदिश कनेक्शन प्रदान करता है, जो इसे रीयल-टाइम एप्लिकेशन: चैट, सूचनाएं, सहयोगात्मक संपादन और ऑनलाइन गेम के लिए आदर्श बनाता है। इस लेख में, हम सरल echo-सर्वर से परे TypeScript पर WebSocket के साथ काम करने की उन्नत तकनीकों पर चर्चा करेंगे।



1. कक्ष प्रबंधन (Rooms) के साथ आर्किटेक्चर



वास्तविक एप्लिकेशन में, सभी क्लाइंट को वैश्विक प्रसारण शायद ही कभी उपयोग किया जाता है। अक्सर, क्लाइंट को कमरों में तार्किक रूप से विभाजित करने की आवश्यकता होती है (उदाहरण के लिए, चैट रूम या गेमिंग सत्र)। आइए ws लाइब्रेरी का उपयोग करके TypeScript पर कार्यान्वयन देखें।



import { WebSocketServer, WebSocket } from 'ws';

interface Room { id: string; clients: Set<WebSocket>;}

class RoomManager { private rooms: Map<string, Room> = new Map();

createRoom(roomId: string): void { if (!this.rooms.has(roomId)) { this.rooms.set(roomId, { id: roomId, clients: new Set() }); } }

joinRoom(roomId: string, client: WebSocket): void { this.createRoom(roomId); this.rooms.get(roomId)!.clients.add(client); client.send(JSON.stringify({ type: 'room_joined', roomId })); }

leaveRoom(roomId: string, client: WebSocket): void { const room = this.rooms.get(roomId); if (room) { room.clients.delete(client); if (room.clients.size === 0) { this.rooms.delete(roomId); } } }

broadcastToRoom(roomId: string, message: object, sender?: WebSocket): void { const room = this.rooms.get(roomId); if (room) { const data = JSON.stringify(message); room.clients.forEach(client => { if (client.readyState === WebSocket.OPEN && client !== sender) { client.send(data); } }); } }}

const wss = new WebSocketServer({ port: 8080 });const roomManager = new RoomManager();

wss.on('connection', (ws: WebSocket) => { ws.on('message', (raw: Buffer) => { try { const msg = JSON.parse(raw.toString()); switch (msg.type) { case 'join': roomManager.joinRoom(msg.roomId, ws); break; case 'leave': roomManager.leaveRoom(msg.roomId, ws); break; case 'message': roomManager.broadcastToRoom(msg.roomId, { type: 'chat', user: msg.user, text: msg.text }, ws); break; } } catch (e) { ws.send(JSON.stringify({ type: 'error', message: 'Invalid JSON' })); } });

ws.on('close', () => { // सफाई: क्लाइंट को सभी कमरों से हटाएं roomManager.leaveRoom('*', ws); });});


यह कोड कमरों के साथ सुरक्षित कार्य प्रदर्शित करता है: आवश्यकता पर निर्माण, खाली कमरों की स्वचालित सफाई, और प्रेषक को प्रसारण से बाहर करना।



2. प्रमाणीकरण और स्थिति प्रबंधन



WebSocket कनेक्शन प्रमाणित होने चाहिए। उन्नत दृष्टिकोण कनेक्शन स्थापित करते समय टोकन की जांच करना और सत्र बनाए रखना है।



import { IncomingMessage } from 'http';import { WebSocketServer, WebSocket } from 'ws';

interface AuthenticatedSocket extends WebSocket { userId?: string; username?: string;}

const wss = new WebSocketServer({ port: 8080, verifyClient: (info: { req: IncomingMessage }, callback: (res: boolean) => void) => { const token = extractToken(info.req.url || ''); if (token && validateToken(token)) { callback(true); } else { callback(false); } }});

function extractToken(url: string): string | null { const params = new URLSearchParams(url.split('?')[1] || ''); return params.get('token');}

function validateToken(token: string): boolean { // यहां JWT या किसी अन्य टोकन की वास्तविक जांच होनी चाहिए return token.length > 10;}

wss.on('co

ब्लॉग

पुस्तक अनुशंसाएँ