Building Real-Time Applications with Node.js and WebSockets
Strategies for developing real-time applications using Node.js and WebSockets to enable instant data exchange and interactive user experiences.
0 likes
18 views
Rule Content
title: Building Real-Time Applications with Node.js and WebSockets description: Strategies for developing real-time applications using Node.js and WebSockets to enable instant data exchange and interactive user experiences. category: Node.js Cursor Rules rules: - name: use_native_websocket_client description: Utilize Node.js's built-in WebSocket client for real-time communication to reduce dependencies and align with modern web standards. filters: - type: node_version pattern: ">=21.0.0" actions: - type: suggest message: | Node.js v21 and later include a native WebSocket client, eliminating the need for external libraries. This built-in client simplifies real-time communication and ensures better interoperability. For example: ```javascript const socket = new WebSocket('ws://localhost:8080'); socket.addEventListener('open', () => { console.log('Connected to server'); socket.send('Hello Server!'); }); socket.addEventListener('message', (event) => { console.log('Message from server:', event.data); }); ``` Ensure your Node.js version is up to date to leverage this feature. references: - https://nodejs.org/en/learn/getting-started/websocket - name: secure_websocket_connections description: Implement SSL/TLS to secure WebSocket connections and protect data integrity. filters: - type: file_content pattern: "new WebSocket\\('ws://" actions: - type: suggest message: | To secure WebSocket connections, use the 'wss://' protocol with SSL/TLS encryption. This ensures data transmitted over the connection is encrypted and secure from eavesdropping or tampering. For example: ```javascript const fs = require('fs'); const https = require('https'); const WebSocket = require('ws'); const server = https.createServer({ key: fs.readFileSync('path/to/private-key.pem'), cert: fs.readFileSync('path/to/certificate.pem') }); const wss = new WebSocket.Server({ server }); server.listen(8080, () => { console.log('Secure WebSocket server is running on port 8080'); }); ``` Ensure you have valid SSL/TLS certificates configured for your domain. references: - https://medium.com/@innovativejude.tech/how-to-secure-websocket-connections-in-node-js-a-step-by-step-guide-6d983a07bd96 - name: handle_websocket_errors description: Implement comprehensive error handling for WebSocket connections to maintain application stability. filters: - type: file_content pattern: "new WebSocket\\(" actions: - type: suggest message: | Always include error handling logic for WebSocket connections to manage potential disconnections or message failures. For example: ```javascript const socket = new WebSocket('ws://localhost:8080'); socket.addEventListener('error', (error) => { console.error('WebSocket error:', error); }); socket.addEventListener('close', (event) => { console.log('WebSocket connection closed:', event.code, event.reason); }); ``` Proper error handling ensures a better user experience and aids in troubleshooting issues. references: - https://infinitejs.com/posts/avoiding-pitfalls-nodejs-websocket-chat/ - name: implement_heartbeat_mechanism description: Use heartbeat mechanisms to detect and manage inactive WebSocket connections. filters: - type: file_content pattern: "new WebSocket\\(" actions: - type: suggest message: | Implement a heartbeat or ping/pong mechanism to detect and manage inactive WebSocket connections. This helps maintain connection stability and detect dropped connections. For example: ```javascript const sendHeartbeat = (ws) => { if (ws.readyState === WebSocket.OPEN) { ws.send(JSON.stringify({ type: 'heartbeat' })); } }; setInterval(() => { wss.clients.forEach(sendHeartbeat); }, 30000); // Send a heartbeat every 30 seconds ``` This practice ensures that both client and server are aware of the connection's status. references: - https://infinitejs.com/posts/avoiding-websocket-pitfalls-nodejs-chat/ - name: validate_incoming_messages description: Validate and sanitize incoming WebSocket messages to prevent security vulnerabilities. filters: - type: file_content pattern: "ws\\.on\\('message'," actions: - type: suggest message: | Always validate and sanitize incoming WebSocket messages to prevent security vulnerabilities. For example: ```javascript ws.on('message', (message) => { try { const data = JSON.parse(message); // Validate data structure and content here } catch (error) { console.error('Invalid message received:', error); ws.close(1008, 'Invalid message format'); } }); ``` Proper validation ensures that only well-formed and expected data is processed by your application. references: - https://infinitejs.com/posts/avoiding-websocket-pitfalls-nodejs-chat/