En bref
Utilisez le WebSocket Natif pour une communication simple en temps réel avec les navigateurs modernes. Utilisez Socket.IO lorsque vous avez besoin d'une reconnexion automatique, de transports de secours ou de salons/espaces de noms. Socket.IO ajoute plus de 200 Ko de surcharge mais gère les cas limites. La Modern PetstoreAPI implémente les deux : WebSocket Natif pour les enchères, Socket.IO pour le chat.
Introduction
Vous avez besoin d'une communication bidirectionnelle en temps réel. Devez-vous utiliser le WebSocket Natif ou Socket.IO ? Le WebSocket Natif est intégré aux navigateurs et est rapide. Socket.IO ajoute des fonctionnalités mais augmente la taille du bundle de plus de 200 Ko.
Modern PetstoreAPI utilise les deux. Le WebSocket Natif pour les enchères d'animaux en direct où la performance est essentielle. Socket.IO pour le chat de support client où la reconnexion automatique et les salons sont précieux.
Si vous testez des API en temps réel, Apidog prend en charge le test du WebSocket Natif et de Socket.IO.
WebSocket Natif
Le WebSocket Natif est la norme du navigateur pour la communication bidirectionnelle.
Utilisation de base
const ws = new WebSocket('wss://petstoreapi.com/auctions/019b4132');
ws.onopen = () => {
ws.send(JSON.stringify({ type: 'bid', amount: 500 }));
};
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log('Received:', data);
};
ws.onerror = (error) => {
console.error('WebSocket error:', error);
};
ws.onclose = () => {
console.log('Connection closed');
};
Avantages
1. Aucune dépendance - Intégré aux navigateurs 2. Rapide - Surcharge minimale 3. Simple - API directe 4. Léger - Aucun impact sur la taille du bundle
Inconvénients
1. Pas de reconnexion automatique - Vous devez implémenter la logique de réessai 2. Pas de secours - Si WebSocket échoue, vous êtes bloqué 3. Pas de salons/espaces de noms - Doit être implémenté manuellement 4. Battement de cœur manuel - Nécessite un ping/pong pour la santé de la connexion
Fonctionnalités de Socket.IO
Socket.IO est une bibliothèque construite sur WebSocket avec des fonctionnalités supplémentaires.
Utilisation de base
import io from 'socket.io-client';
const socket = io('https://petstoreapi.com', {
path: '/chat'
});
socket.on('connect', () => {
socket.emit('join-room', 'support-123');
});
socket.on('message', (data) => {
console.log('Received:', data);
});
socket.on('disconnect', () => {
console.log('Disconnected - will auto-reconnect');
});
Fonctionnalités clés
1. Reconnexion automatique
const socket = io('https://petstoreapi.com', {
reconnection: true,
reconnectionDelay: 1000,
reconnectionAttempts: 5
});
2. Transports de secours
Si WebSocket échoue, Socket.IO essaie :
- WebSocket
- HTTP long-polling
- HTTP streaming
3. Salons et Espaces de noms
// Serveur
io.of('/chat').on('connection', (socket) => {
socket.join('support-123');
socket.to('support-123').emit('user-joined');
});
// Client
const socket = io('/chat');
4. Accusés de réception
socket.emit('bid', { amount: 500 }, (response) => {
console.log('Server acknowledged:', response);
});
5. Prise en charge binaire
socket.emit('image', buffer);
Inconvénients
1. Bundle volumineux - 200 Ko+ minifiés 2. Dépendance serveur - Nécessite un serveur Socket.IO 3. Plus complexe - Concepts supplémentaires à apprendre 4. Surcharge - Couche de protocole supplémentaire
Comparaison
| Caractéristique | WebSocket Natif | Socket.IO |
|---|---|---|
| Taille du bundle | 0 Ko | 200+ Ko |
| Reconnexion auto | Non | Oui |
| Secours | Non | Oui (long-polling) |
| Salons | Non | Oui |
| Accusés de réception | Non | Oui |
| Binaire | Oui | Oui |
| Support navigateur | Moderne | Tous (via secours) |
| Serveur | N'importe quel WebSocket | Serveur Socket.IO |
| Complexité | Simple | Plus complexe |
Comment Modern PetstoreAPI utilise les deux
WebSocket Natif pour les enchères
Les enchères d'animaux en direct nécessitent une faible latence :
const ws = new WebSocket('wss://petstoreapi.com/auctions/019b4132');
ws.onmessage = (event) => {
const { type, data } = JSON.parse(event.data);
if (type === 'bid') {
updateBidDisplay(data.amount, data.userId);
}
if (type === 'sold') {
showSoldNotification(data.winnerId);
}
};
// Placer une enchère
ws.send(JSON.stringify({
type: 'bid',
amount: 500
}));
Pourquoi le WebSocket Natif :
- Critique pour la performance
- Public de navigateurs modernes
- Protocole d'enchère simple
- Pas besoin de salons
Socket.IO pour le chat de support
Le chat de support client nécessite de la fiabilité :
const socket = io('https://petstoreapi.com/chat');
socket.on('connect', () => {
socket.emit('join-support', { userId: 'user-456' });
});
socket.on('message', (msg) => {
displayMessage(msg);
});
socket.on('agent-typing', () => {
showTypingIndicator();
});
// Envoyer un message
socket.emit('message', {
text: 'I need help with my order',
userId: 'user-456'
});
Pourquoi Socket.IO :
- Reconnexion automatique (utilisateurs mobiles)
- Salons (sessions de support multiples)
- Secours pour les réseaux d'entreprise
- Accusés de réception pour la livraison des messages
Consultez les docs WebSocket de Modern PetstoreAPI et les docs Socket.IO.
Tests avec Apidog
Apidog prend en charge les deux protocoles :
Tester le WebSocket Natif :
1. Créer une requête WebSocket
2. Se connecter à wss://petstoreapi.com/auctions/019b4132
3. Envoyer des messages de test
4. Valider les réponses
Tester Socket.IO :
1. Créer une connexion Socket.IO
2. Tester les événements et les accusés de réception
3. Valider le comportement des salons
4. Tester les scénarios de reconnexion
Quand utiliser chacun
Utilisez le WebSocket Natif lorsque :
- Vous construisez uniquement pour les navigateurs modernes
- La performance est critique
- La messagerie bidirectionnelle est simple
- Vous voulez une taille de bundle minimale
- Vous n'avez pas besoin de reconnexion automatique
Exemples :
- Enchères en direct
- Tableaux de bord en temps réel
- Jeux (avec reconnexion manuelle)
- Tickers boursiers
Utilisez Socket.IO lorsque :
- Vous avez besoin d'une reconnexion automatique
- Vous supportez les navigateurs plus anciens
- Réseaux d'entreprise (nécessite un secours)
- Vous avez besoin de salons/espaces de noms
- Vous voulez des accusés de réception
- Applications mobiles (réseaux peu fiables)
Exemples :
- Applications de chat
- Édition collaborative
- Support client
- Notifications avec confirmation de livraison
Conclusion
Le WebSocket Natif est plus rapide et plus simple. Socket.IO est plus riche en fonctionnalités mais plus lourd. Choisissez en fonction de vos besoins, et non de ce qui est « mieux ».
Modern PetstoreAPI utilise les deux : le WebSocket Natif là où la performance compte, Socket.IO là où la fiabilité et les fonctionnalités sont importantes.
FAQ
Puis-je utiliser Socket.IO avec des clients WebSocket Natif ?
Non. Socket.IO utilise un protocole personnalisé. Vous avez besoin d'un client Socket.IO pour vous connecter à un serveur Socket.IO.
Socket.IO fonctionne-t-il à travers les pare-feu d'entreprise ?
Oui. Socket.IO utilise le long-polling HTTP si WebSocket est bloqué.
Socket.IO est-il plus lent que le WebSocket Natif ?
Légèrement. Socket.IO ajoute une surcharge protocolaire, mais la différence est négligeable pour la plupart des applications.
Puis-je migrer de Socket.IO vers le WebSocket Natif ?
Oui, mais vous devrez implémenter vous-même la reconnexion, les salons et d'autres fonctionnalités.
Le WebSocket Natif prend-il en charge les salons ?
Non. Vous devez implémenter la logique des salons sur le serveur et suivre quelles connexions appartiennent à quels salons.
