К основному содержанию
скилл CX Codex

websocket-implementation · secondsky — скилл для Claude Code: real-time

Скилл для агента, который пишет сервер и клиент WebSocket: комнаты, переподключение, масштабирование через Redis.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add secondsky/claude-skills --skill websocket-implementation -a claude-code
Открыть на GitHub

Что делает websocket-implementation

Скилл даёт агенту готовые шаблоны для real-time связи на Socket.IO. Внутри — серверная часть с аутентификацией по токену из handshake, карта подключённых пользователей, комнаты через socket.join и рассылка сообщений в комнату или конкретному пользователю. Есть утилиты для точечной доставки: обновление профиля, уведомление комнаты, личное сообщение.

Клиентская часть — класс с очередью сообщений: если сокет отключён, сообщение не теряется, а уходит после восстановления связи. Переподключение настроено с задержкой и числом попыток. Для React есть хук useWebSocket, который отдаёт состояние соединения, список сообщений и функцию отправки. Токен хук берёт из вашей функции getToken() — её нужно написать самому, готовой реализации в скилле нет.

Для нескольких серверов подключается адаптер @socket.io/redis-adapter через REDIS_URL. Без Redis горизонтальное масштабирование не заработает: сообщение, отправленное на одном инстансе, не дойдёт до клиентов на другом. В скилле есть таблица выбора архитектуры по числу соединений и Express-эндпоинты /api/ws/stats и /api/ws/health для мониторинга. Python-вариант на aiohttp и FastAPI вынесен в отдельный файл references/python-websocket.md.

Какие задачи решает

  • поднять сервер Socket.IO с аутентификацией по токену
  • раздавать сообщения по комнатам и отдельным пользователям
  • пережить обрыв связи без потери отправленных сообщений
  • развести соединения по нескольким инстансам через Redis
  • подключить WebSocket к React-компоненту одним хуком

Примеры запросов агенту

  • Напиши сервер Socket.IO с комнатами и аутентификацией по токену из handshake
  • Сделай React-хук useWebSocket с очередью сообщений на время обрыва связи
  • Подключи Redis-адаптер, чтобы сообщения доходили между инстансами

Как установить websocket-implementation

1Через Skills CLI (Vercel)

npx skills add secondsky/claude-skills --skill websocket-implementation -a claude-code

2Вручную: положить файлы

~/.claude/skills/websocket-implementation/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/websocket-implementation/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Из того же набора89

security-headers-configuration Настраивает HTTP-заголовки безопасности против XSS, кликджекинга и MIME-сниффинга. Пригодится при аудите или внедрении CSP. CX Codex +1 438установок mutation-testing Вносит мелкие правки в код и смотрит, ловят ли их тесты. Показывает, где тест проходит, хотя баг уже в коде. CX Codex +1 432установок seo-optimizer Разбирает статью или блог-пост по ключевым словам, читабельности и техническим тегам, а потом выдаёт список правок по приоритету. CX Codex +1 433установок mobile-app-debugging Скилл для отладки iOS, Android и кроссплатформенных приложений: падения, утечки памяти, просадки FPS, сетевые проблемы. CX Codex +1 428установок root-cause-tracing Ведёт агента назад по стеку вызовов, пока не найдётся исходный триггер ошибки. Пригодится, когда падение случается глубоко в коде, а не на входе. CX Codex +1 426установок recommendation-engine Скилл для построения рекомендательных систем: коллаборативная фильтрация, матричная факторизация, гибридные подходы. Пригодится, когда нужны персональные подборки товаров или контента. CX Codex +1 423установок api-response-optimization Скилл для ИИ-кодинга, который подсказывает, как уменьшить размер ответов API, включить кэширование и сжатие. Пригодится, когда эндпоинты отвечают медленно. CX Codex +1 422установок api-filtering-sorting Скилл для ИИ-агента, который помогает собрать фильтрацию и сортировку в API: разбор query-параметров, валидация, защита от инъекций. CX Codex +1 418установок

Другие версии websocket-implementation

Похожие

websocket-engineer https://github.com/Jeffallan Скилл помогает проектировать WebSocket- и Socket.IO-системы: сообщения, комнаты, presence и масштабирование через Redis. CX Codex +1 6 800установок websocket-development Mindrally Набор правил для агента, который пишет сервер и клиент на WebSocket: соединения, сообщения, масштабирование, безопасность. CX Codex +1 826установок testing-websocket-api-security mahipal Проверяет безопасность WebSocket API: аутентификацию при рукопожатии, токены и уязвимость к CSWSH. Пригодится при аудите защищённости сокетов. CX Codex +1 328установок websocket-security yaklang Помогает анализировать безопасность веб-сокетов, выявлять уязвимость CSWSH и тестировать handshake. Пригодится при аудите чатов, уведомлений и реального времени в веб-приложениях. CX Codex +1 3 800установок rate-limiting-implementation aj-geddes Скилл помогает агенту добавить в сервис ограничение частоты запросов, квоты и backpressure. Пригодится, когда API открыт наружу или нагрузка растёт. CX Codex +1 502установок neon-realtime neondatabase Делает любой SQL-запрос живым: клиент подписывается на изменения строк в Lakebase Postgres и получает их батчами. Пригодится для дашбордов, лент и синхронизации между устройствами. CX Codex +1 6 000установок

Рядом в теме «Бэкенд и API»

Всё по теме «Бэкенд и API» →

Вопросы о websocket-implementation

Как установить websocket-implementation в Claude?

Выполните npx skills add secondsky/claude-skills --skill websocket-implementation -a claude-code. После этого файл скилла лежит в ~/.claude/skills/websocket-implementation/SKILL.md.

Что делает websocket-implementation?

Даёт агенту шаблоны сервера и клиента Socket.IO: управление подключениями, комнаты, очередь сообщений, переподключение и адаптер Redis для нескольких инстансов.

Нужен ли Redis для работы скилла?

Для одного сервера нет. Redis нужен, когда инстансов несколько: без адаптера @socket.io/redis-adapter сообщения не расходятся между ними.

Исходный текст

SKILL.md · MIT
---
name: websocket-implementation
description: Implements real-time WebSocket communication with connection management, room-based messaging, and horizontal scaling. Use when building chat systems, live notifications, collaborative tools, or real-time dashboards.
license: MIT
---

# WebSocket Implementation

Build scalable real-time communication systems with proper connection management.

## Server Implementation (Socket.IO)

```javascript
const { Server } = require('socket.io');
const { createAdapter } = require('@socket.io/redis-adapter');
const { createClient } = require('redis');

const io = new Server(server, {
  cors: { origin: process.env.CLIENT_URL, credentials: true }
});

// Redis adapter for horizontal scaling
const pubClient = createClient({ url: process.env.REDIS_URL });
const subClient = pubClient.duplicate();
Promise.all([pubClient.connect(), subClient.connect()]).then(() => {
  io.adapter(createAdapter(pubClient, subClient));
});

// Connection management
const users = new Map();

io.use((socket, next) => {
  const token = socket.handshake.auth.token;
  try {
    socket.user = verifyToken(token);
    next();
  } catch (err) {
    next(new Error('Authentication failed'));
  }
});

io.on('connection', (socket) => {
  users.set(socket.user.id, socket.id);
  console.log(`User ${socket.user.id} connected`);

  socket.on('join-room', (roomId) => {
    socket.join(roomId);
    socket.to(roomId).emit('user-joined', socket.user);
  });

  socket.on('message', ({ roomId, content }) => {
    io.to(roomId).emit('message', {
      userId: socket.user.id,
      content,
      timestamp: Date.now()
    });
  });

  socket.on('disconnect', () => {
    users.delete(socket.user.id);
  });
});

// Utility methods for message distribution
function broadcastUserUpdate(userId, data) {
  io.to(`user:${userId}`).emit('user-update', data);
}

function notifyRoom(roomId, event, data) {
  io.to(`room:${roomId}`).emit(event, data);
}

function sendDirectMessage(userId, message) {
  const socketId = users.get(userId);
  if (socketId) {
    io.to(socketId).emit('direct-message', message);
  }
}
```

## Client Implementation

```javascript
import { io } from 'socket.io-client';

class WebSocketClient {
  constructor(url, token) {
    this.socket = io(url, {
      auth: { token },
      reconnection: true,
      reconnectionDelay: 1000,
      reconnectionAttempts: 5
    });

    this.messageQueue = [];
    this.setupListeners();
  }

  setupListeners() {
    this.socket.on('connect', () => {
      console.log('Connected');
      this.flushQueue();
    });

    this.socket.on('disconnect', (reason) => {
      console.log('Disconnected:', reason);
    });

    this.socket.on('message', (msg) => {
      this.onMessage?.(msg);
    });
  }

  joinRoom(roomId) {
    this.socket.emit('join-room', roomId);
  }

  send(roomId, content) {
    if (this.socket.connected) {
      this.socket.emit('message', { roomId, content });
    } else {
      this.messageQueue.push({ roomId, content });
    }
  }

  flushQueue() {
    while (this.messageQueue.length > 0) {
      const msg = this.messageQueue.shift();
      this.socket.emit('message', msg);
    }
  }
}
```

## React Hook

```javascript
function useWebSocket(url) {
  const [socket, setSocket] = useState(null);
  const [connected, setConnected] = useState(false);
  const [messages, setMessages] = useState([]);

  useEffect(() => {
    // getToken() is a user-supplied helper that returns the current auth token
    // Example implementations:
    // - From localStorage: () => localStorage.getItem('authToken')
    // - From context: () => authContext.token
    // - From cookie: () => document.cookie.split('token=')[1]
    const ws = io(url, { auth: { token: getToken() } });

    ws.on('connect', () => setConnected(true));
    ws.on('disconnect', () => setConnected(false));
    ws.on('message', (msg) => {
      setMessages(prev => [...prev, msg]);
    });

    setSocket(ws);
    return () => ws.disconnect();
  }, [url]);

  const send = useCallback((roomId, content) => {
    socket?.emit('message', { roomId, content });
  }, [socket]);

  return { connected, messages, send };
}
```

## Message Protocol

```typescript
interface Message {
  type: 'message' | 'typing' | 'presence';
  roomId: string;
  userId: string;
  content?: string;
  timestamp: number;
}

// Acknowledge delivery
socket.emit('message', data, (ack) => {
  if (ack.success) console.log('Delivered');
});
```

## Additional Implementations

See [references/python-websocket.md](references/python-websocket.md) for:
- Python aiohttp WebSocket server
- FastAPI WebSocket endpoints
- Async connection handling

## Scaling Considerations

| Connections | Architecture |
|-------------|--------------|
| <10K | Single server |
| 10K-100K | Redis pub/sub |
| >100K | Sharded Redis + load balancer |

## Monitoring Endpoints

```javascript
// Express endpoints for operational visibility
app.get('/api/ws/stats', (req, res) => {
  res.json({
    activeConnections: io.sockets.sockets.size,
    rooms: [...io.sockets.adapter.rooms.keys()],
    users: users.size
  });
});

app.get('/api/ws/health', (req, res) => {
  res.json({
    status: 'healthy',
    uptime: process.uptime(),
    memoryUsage: process.memoryUsage()
  });
});
```

## Best Practices

- Authenticate before allowing operations
- Implement reconnection with exponential backoff
- Use rooms and channels for targeted broadcasting
- Add heartbeat/ping for connection health
- Persist important messages to database
- Monitor active connection counts
- Display user presence/availability status
- Implement rate limiting on incoming messages
- Use acknowledgments to confirm message delivery
- Leverage Redis for distributed deployments
- Implement comprehensive error handling

## Never Do

- Send sensitive data unencrypted
- Store unlimited messages in memory
- Skip authorization on room joins
- Ignore connection error handling
- Allow unbounded room subscriptions
- Neglect cleanup of disconnected user data
- Send frequent oversized message payloads
- Include authentication credentials in message bodies
- Deploy without security validation
- Allow uncontrolled connection accumulation
- Build without scalability consideration

© secondsky · MIT · secondsky/claude-skills

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой