Implementing Real-Time Features in JavaScript with WebSockets

Guidelines on using WebSockets to add real-time communication capabilities to JavaScript applications.

0 likes
18 views

Rule Content

---
title: Implementing Real-Time Features in JavaScript with WebSockets
description: Guidelines on using WebSockets to add real-time communication capabilities to JavaScript applications.
category: JavaScript Cursor Rules
---

# Implementing Real-Time Features in JavaScript with WebSockets

## Context
- Applicable when integrating WebSocket-based real-time communication in JavaScript applications.
- Assumes familiarity with JavaScript ES6+ and basic networking concepts.

## Requirements

1. **Use Standard WebSocket API**
   - Utilize the native WebSocket API for establishing connections.
   - Example:
     ```javascript
     const socket = new WebSocket('wss://example.com/socket');
     ```

2. **Handle Connection Lifecycle Events**
   - Implement event listeners for `open`, `message`, `error`, and `close` events.
   - Example:
     ```javascript
     socket.addEventListener('open', (event) => {
       console.log('Connection opened:', event);
     });

     socket.addEventListener('message', (event) => {
       console.log('Message received:', event.data);
     });

     socket.addEventListener('error', (event) => {
       console.error('WebSocket error:', event);
     });

     socket.addEventListener('close', (event) => {
       console.log('Connection closed:', event);
     });
     ```

3. **Implement Reconnection Logic**
   - Detect unexpected disconnections and attempt to reconnect with exponential backoff.
   - Example:
     ```javascript
     let reconnectAttempts = 0;
     const maxReconnectAttempts = 5;

     function connect() {
       const socket = new WebSocket('wss://example.com/socket');

       socket.addEventListener('close', (event) => {
         if (!event.wasClean && reconnectAttempts < maxReconnectAttempts) {
           const timeout = Math.pow(2, reconnectAttempts) * 1000;
           setTimeout(connect, timeout);
           reconnectAttempts++;
         }
       });
     }

     connect();
     ```

4. **Secure WebSocket Connections**
   - Always use the `wss://` protocol to encrypt data in transit.
   - Ensure the server has a valid SSL/TLS certificate.

5. **Validate and Sanitize Messages**
   - Validate incoming messages to prevent injection attacks.
   - Sanitize outgoing messages to avoid sending malicious data.

6. **Manage Resource Cleanup**
   - Close WebSocket connections when no longer needed to free up resources.
   - Example:
     ```javascript
     socket.close();
     ```

7. **Handle Large Payloads Efficiently**
   - Implement logic to handle large messages, such as chunking or compression, to maintain performance.

8. **Monitor and Log WebSocket Activity**
   - Log connection status, errors, and messages for debugging and monitoring purposes.

## Examples

<example>
**Good Example:**
const socket = new WebSocket('wss://example.com/socket');

socket.addEventListener('open', () => {
  console.log('Connected to WebSocket server');
});

socket.addEventListener('message', (event) => {
  const data = JSON.parse(event.data);
  // Process data
});

socket.addEventListener('error', (event) => {
  console.error('WebSocket error:', event);
});

socket.addEventListener('close', (event) => {
  if (!event.wasClean) {
    console.log('Connection lost, attempting to reconnect...');
    // Reconnection logic here
  }
});
</example>

<example type="invalid">
**Bad Example:**
const socket = new WebSocket('ws://example.com/socket'); // Insecure connection

socket.onmessage = (event) => {
  // Directly using event data without validation
  document.body.innerHTML = event.data;
};

socket.onclose = () => {
  // No reconnection logic
};
</example>