Przejdź do treści
Biblioteka skilli
Programowanie · Nauka i wyjaśnianie

socket-io

/socket-io

Opisuje komunikację dwukierunkową w czasie rzeczywistym w Socket.IO: pokoje, przestrzenie nazw, potwierdzenia, middleware, skalowanie z adapterem Redis i typy TypeScript.

Licencja
MIT
Ostatnia zmiana repozytorium
21.10.2026

Ocena i bezpieczeństwo

100/ 100Klasa: dobry
Format25 / 25
Frontmatter z nazwą i opisem, poprawna nazwa, opis do 1024 znaków, nazwa zgodna z folderem.
Odkrywalność25 / 25
Opis mówi, kiedy użyć skilla, ma sensowną długość i jest w 3. osobie.
Treść35 / 35
Co najmniej 150 słów i do 500 linii, nagłówki, listy kroków, przykłady albo kod.
Higiena15 / 15
Bez zaślepek typu TODO, bez ścieżek Windows, z licencją.
Ryzykobrak sygnałów w skanie
Pliki w paczce
1
Skrypty
0
Komentarze HTML
0
Adresy URL w SKILL.md
0
Przestarzałość

Brak sygnałów. Repozytorium zmienione 21.10.2026, bez odwołań do wycofanych modeli i API.

Licencja

MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.

Co robi i kiedy

Opisuje komunikację dwukierunkową w czasie rzeczywistym w Socket.IO: pokoje, przestrzenie nazw, potwierdzenia, middleware, skalowanie z adapterem Redis i typy TypeScript.

Wyzwalacze z opisu

Socket.IOreal-time chatlive updatesbidirectional WebSocketroomsnamespaces
Oryginalny opis (EN)

Socket.IO real-time bidirectional communication. Rooms, namespaces, acknowledgments, middleware, scaling with Redis adapter, and TypeScript types. USE WHEN: user mentions "Socket.IO", "socket.io", "real-time chat", "live updates", "bidirectional WebSocket", "rooms", "namespaces" DO NOT USE FOR: SSE (server-sent events) - use `sse`; WebRTC - use `webrtc`; raw WebSocket without Socket.IO - use framework WS skills

Jak działa

  1. Server Setup
  2. Client Setup
  3. Scaling with Redis Adapter
  4. React Hook
  5. Anti-Patterns
  6. Production Checklist
Sekcje z nagłówków SKILL.md, w oryginale · 125 linii, 400 słów
Podgląd SKILL.md
---
name: socket-io
description: |
  Socket.IO real-time bidirectional communication. Rooms, namespaces,
  acknowledgments, middleware, scaling with Redis adapter, and TypeScript types.

  USE WHEN: user mentions "Socket.IO", "socket.io", "real-time chat",
  "live updates", "bidirectional WebSocket", "rooms", "namespaces"

  DO NOT USE FOR: SSE (server-sent events) - use `sse`;
  WebRTC - use `webrtc`; raw WebSocket without Socket.IO - use framework WS skills
allowed-tools: Read, Grep, Glob, Write, Edit
---
# Socket.IO

## Server Setup

```typescript
import { Server } from 'socket.io';
import { createServer } from 'http';

const httpServer = createServer(app);

interface ServerToClientEvents {
  message: (data: { user: string; text: string; timestamp: number }) => void;
  userJoined: (user: string) => void;
}

interface ClientToServerEvents {
  sendMessage: (text: string, callback: (status: 'ok' | 'error') => void) => void;
  joinRoom: (room: string) => void;
}

const io = new Server<ClientToServerEvents, ServerToClientEvents>(httpServer, {
  cors: { origin: process.env.CLIENT_URL },
});

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

io.on('connection', (socket) => {
  console.log(`${socket.data.user.name} connected`);

  socket.on('joinRoom', (room) => {
    socket.join(room);
    socket.to(room).emit('userJoined', socket.data.user.name);
  });

  socket.on('sendMessage', (text, callback) => {
    const message = { user: socket.data.user.name, text, timestamp: Date.now() };
    io.to('general').emit('message', message);
    callback('ok');
  });

  socket.on('disconnect', () => {
    console.log(`${socket.data.user.name} disconnected`);
  });
});
```

## Client Setup

```typescript
import { io, Socket } from 'socket.io-client';

const socket: Socket<ServerToClientEvents, ClientToServerEvents> = io(API_URL, {
  auth: { token: getAuthToken() },
  reconnection: true,
  reconnectionDelay: 1000,
});

socket.on('connect', () => console.log('Connected'));
socket.on('message', (data) => addMessage(data));
socket.on('connect_error', (err) => console.error(err.message));

// With acknowledgment
socket.emit('sendMessage', 'Hello!', (status) => {
  if (status === 'error') showError('Failed to send');
});
```

## Scaling with Redis Adapter

```typescript
import { createAdapter } from '@socket.io/redis-adapter';
import { createClient } from 'redis';

const pubClient = createClient({ url: process.env.REDIS_URL });
const subClient = pubClient.duplicate();
await Promise.all([pubClient.connect(), subClient.connect()]);

io.adapter(createAdapter(pubClient, subClient));
```

## React Hook

```tsx
function useSocket(room: string) {
  const [messages, setMessages] = useState<Message[]>([]);

  useEffect(() => {
    socket.emit('joinRoom', room);
    socket.on('message', (msg) => setMessages((prev) => [...prev, msg]));
    return () => { socket.off('message'); };
  }, [room]);

  const send = (text: string) => socket.emit('sendMessage', text, () => {});
  return { messages, send };
}
```

## Anti-Patterns

| Anti-Pattern | Fix |
|--------------|-----|
| No authentication | Use `io.use()` middleware with JWT |
| Broadcasting to all instead of rooms | Use `socket.to(room).emit()` |
| No reconnection handling | Enable reconnection, show UI indicator |
| Single server without adapter | Use Redis adapter for horizontal scaling |
| No acknowledgments for critical events | Use callback parameter for delivery confirmation |

## Production Checklist

- [ ] Authentication middleware on connection
- [ ] Redis adapter for multi-server deployment
- [ ] Reconnection with exponential backoff
- [ ] Room-based message scoping
- [ ] Connection state UI indicator
- [ ] Rate limiting on message events

Wersje

W bazie nie ma innych skilli o nazwie socket-io.

Migawka bazy z 13.11.2026 · wersja paczki 9c31c49db4a9 (skrót SHA-256 całej paczki)

Pobrania w ostatnich 30 dniach: 0 · ranking

Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.

Podobne skille

  • 100socketio
    Opisuje Socket.IO 4.x: przestrzenie nazw, pokoje, potwierdzenia, adaptery, skalowanie i odzyskiwanie połączenia.
  • 100websocket-engineer
    Projektuje komunikację dwukierunkową w czasie rzeczywistym przez WebSockety i Socket.IO, także na dużą skalę.
  • 100socketio
    Pomaga budować w Socket.IO komunikację w czasie rzeczywistym dla Node.js: czat, powiadomienia na żywo, panele, wskaźniki obecności, współdzielenie edycji i pub/sub, z uwierzytelnianiem połączeń i skalowaniem.
  • 100websocket-engineer
    Projektuje systemy czasu rzeczywistego na WebSockets i Socket.IO: dwukierunkowe wiadomości, skalowanie przez Redis, obecność i pokoje.
  • 100nestjs-real-time
    Wdraża bramy WebSocket z Socket.io i endpointy Server-Sent Events w NestJS, na przykład do czatu i kanałów na żywo, oraz pomaga wybrać między WebSocket a SSE.
  • 100nestjs-websocket
    Integruje WebSocket w NestJS przez Socket.IO: bramy, pokoje, guardy uwierzytelniania, filtry wyjątków i adapter Redis do skalowania.

Uwagi i zgłoszenia

Wiadomość trafi do Bartosza Sokolińskiego. Adres e-mail jest potrzebny tylko do odpowiedzi. Szczegóły w polityce prywatności.