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.
- Autor
- claude-dev-suite ↗
- Repozytorium
- claude-dev-suite ↗
- Licencja
- MIT
- Ostatnia zmiana repozytorium
- 21.10.2026
Ocena i bezpieczeństwo
- Pliki w paczce
- 1
- Skrypty
- 0
- Komentarze HTML
- 0
- Adresy URL w SKILL.md
- 0
Brak sygnałów. Repozytorium zmienione 21.10.2026, bez odwołań do wycofanych modeli i API.
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
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
- Server Setup
- Client Setup
- Scaling with Redis Adapter
- React Hook
- Anti-Patterns
- Production Checklist
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.