Klientintegration med Socket.io
Anslut Socket.io-klienten, lyssna på namngivna händelser, skicka data till servern, hantera återanslutningslogik och administrera rum från klientsidan.
Klientintegration med Socket.io är en gratis lektion i Frontend Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Frontend Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Frontend Academy innehåller totalt 4 lektioner.
Vad Socket.io lägger till jämfört med en ren WebSocket
Socket.io är ett populärt bibliotek ovanpå WebSocket. Det lägger till automatisk återanslutning, fallback till long-polling, rum och namnrymder, callback-funktioner för bekräftelser samt namngivna händelser. Ett klientbibliotek används tillsammans med ett serverbibliotek (Node.js).
Installera klienten
Installera socket.io-client. Huvudversionen måste vara samma som på servern.
npm install socket.io-clientAnsluta
Importera io och anslut till en server-URL. Det returnerar en Socket-instans.
import { io } from 'socket.io-client';
const socket = io('https://api.example.com', {
transports: ['websocket'], // skip polling fallback for speed
auth: { token: localStorage.getItem('jwt') }
});
socket.on('connect', () => console.log('connected', socket.id));Skicka händelser
socket.emit(eventName, payload) skickar en namngiven händelse med data – betydligt renare än att använda raw send tillsammans med JSON.parse.
socket.emit('chat-message', {
room: 'general',
text: 'Hello everyone!'
});
socket.emit('typing', { user: 'Alice' });Lyssna på händelser
socket.on(eventName, handler) registrerar en lyssnare. Händelser som servern skickar anländer här.
socket.on('chat-message', (msg) => {
console.log(`${msg.user}: ${msg.text}`);
appendMessage(msg);
});
socket.on('user-joined', (user) => {
console.log(`${user.name} joined`);
});Bekräftelser (ack-callbacks)
Skicka en callback-funktion som sista argument till emit – servern kan anropa den med ett svar. Det fungerar ungefär som RPC.
socket.emit('create-post', { title: 'Hello' }, (response) => {
if (response.error) {
console.error(response.error);
} else {
console.log('Created post', response.id);
}
});Promise-baserad emitWithAck
Moderna versioner av Socket.io tillhandahåller emitWithAck, som returnerar ett promise.
try {
const response = await socket.emitWithAck('create-post', { title: 'Hello' });
console.log('Created', response.id);
} catch (err) {
console.error('Failed', err);
}Rum
Rum är grupperingar av sockets på serversidan. Klienten går med i och lämnar rum genom att skicka händelser; servern använder io.to(room).emit() för att sända till alla i rummet.
// Client:
socket.emit('join-room', { roomId: 'general' });
// Listen to messages in any room you've joined:
socket.on('room-message', ({ room, message }) => {
if (room === activeRoom) appendMessage(message);
});
// Leave:
socket.emit('leave-room', { roomId: 'general' });Namnrymder
Namnrymder är separata kommunikationskanaler på samma server – till exempel /chat och /admin. Anslut till en namnrymd genom att lägga till dess suffix i URL:en.
const chatSocket = io('https://api/chat');
const adminSocket = io('https://api/admin');Inbyggd återanslutning
Socket.io återansluter automatiskt med exponentiell backoff. Konfigurera detta via alternativen.
const socket = io({
reconnection: true,
reconnectionAttempts: Infinity,
reconnectionDelay: 1000,
reconnectionDelayMax: 30000,
randomizationFactor: 0.5
});
socket.on('reconnect', (attempt) => console.log('reconnected after', attempt));
socket.on('reconnect_attempt', (attempt) => console.log('trying...', attempt));Hantera frånkoppling
Lyssna efter disconnect för att uppdatera gränssnittet (visa en banner med texten 'ansluter igen...').
socket.on('disconnect', (reason) => {
console.log('Disconnected:', reason);
if (reason === 'io server disconnect') {
// Server kicked us — must reconnect manually
socket.connect();
}
});React-integrering
Kapsla in socket-livscykeln i en egen hook eller en Context-provider.
// useSocket.ts
import { useEffect, useState } from 'react';
import { io, Socket } from 'socket.io-client';
let socket: Socket;
export function useSocket() {
const [connected, setConnected] = useState(false);
useEffect(() => {
if (!socket) socket = io('/');
socket.on('connect', () => setConnected(true));
socket.on('disconnect', () => setConnected(false));
return () => { /* keep socket alive across remounts */ };
}, []);
return { socket, connected };
}När ska Socket.io användas i stället för en ren WebSocket?
Socket.io: när rum, ack-callbacks, automatisk återanslutning och transport-fallback ska finnas direkt. Ren WebSocket: när detaljerad kontroll över protokollet, minimal paketstorlek eller interoperabilitet med en server som inte använder Socket.io behövs.
Snabbtest
Vad möjliggör callback-funktionen som är det tredje argumentet i Socket.io:s emit(event, payload, callback)?
Sammanfattning: Socket.io-klienten
Bibliotek ovanpå WebSocket med rum, namnrymder, bekräftelser, automatisk återanslutning och polling-fallback. io(url, options) ansluter. emit(event, payload) skickar namngivna händelser och on(event, handler) lyssnar. Callback som tredje argument eller emitWithAck används för RPC-liknande anrop. Rum hanteras via servern och namnrymder anges som suffix i URL:en. Återanslutning är inbyggd. Kapsla in livscykeln i en React-hook.
Lär dig HTML med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 41
- Lektioner
- 163
Vanliga frågor
Är lektionen ”Klientintegration med Socket.io” gratis?
Ja – hela texten till ”Klientintegration med Socket.io” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Frontend Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Frontend Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Klientintegration med Socket.io”?
Anslut Socket.io-klienten, lyssna på namngivna händelser, skicka data till servern, hantera återanslutningslogik och administrera rum från klientsidan. Ni övar på Frontend Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Frontend Academy?
Du behöver inga förkunskaper. Utbildningen i Frontend Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”Klientintegration med Socket.io”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Frontend Academy-lektionen?
Ja. Varje Frontend Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- WebSocket API: open, message, close och error
- Klientintegration med Socket.io
- Server-Sent Events för enkelriktad strömning
- Mönster för realtidsgränssnitt