Implementing Real-Time Features in JavaScript with WebSockets
Guidelines on using WebSockets to add real-time communication capabilities to JavaScript applications.
0 likes
361 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>