Aller au contenu principal

Introduction

🎯 Que fait ce module ?​

Le module WS (WebSocket) vous permet de recevoir des notifications en temps réel - mises à jour de contenu, changements de commande, actions des utilisateurs - en établissant des connexions persistantes pour obtenir des mises à jour instantanées sans sondage, permettant des fonctionnalités en direct comme des notifications, un chat en direct et des tableaux de bord en temps réel.

Considérez-le comme votre système de notification en temps réel - au lieu de demander sans cesse "y a-t-il quelque chose de nouveau ?" (sondage), WebSocket maintient une connexion ouverte et le serveur vous envoie instantanément des mises à jour lorsque des événements se produisent.


📖 Explication Simple​

Chaque application moderne a besoin de mises à jour en temps réel :

  • đź”” Notifications en Direct - Alertes instantanĂ©es lorsque quelque chose se produit
  • đź’¬ Chat en Direct - Messagerie en temps rĂ©el entre utilisateurs
  • 📊 Tableaux de Bord en Direct - Statistiques et mĂ©triques se mettant Ă  jour automatiquement
  • đź›’ Mises Ă  Jour de Commandes - Changements de statut de commande instantanĂ©s
  • 📝 Mises Ă  Jour de Contenu - Changements de contenu en direct et publication
  • 👥 ActivitĂ© des Utilisateurs - PrĂ©sence et actions des utilisateurs en temps rĂ©el
  • 🔄 Synchronisation des DonnĂ©es - Synchronisation automatique entre appareils

Le problème avec le sondage (demandes répétées) :

// ❌ Mauvais - Sondage toutes les 5 secondes
setInterval(async () => {
const orders = await Orders.getOrders();
// Vérifiez si quelque chose a changé
// Gaspille de la bande passante, retarde les mises Ă  jour, charge du serveur
}, 5000);

Problèmes :

  • 🔋 Consommation de batterie - Les demandes constantes gaspillent de l'Ă©nergie
  • 📡 Gaspillage de rĂ©seau - La plupart des demandes retournent "aucun changement"
  • ⏱️ Mises Ă  jour retardĂ©es - DĂ©lai allant jusqu'Ă  5 secondes
  • 🖥️ Charge du serveur - Demandes inutiles toutes les quelques secondes

La solution WebSocket :

// ✅ Bon - Connexion WebSocket en temps réel
const { WS } = defineOneEntry('https://your-site.oneentry.cloud', {
token: 'your-app-token'
});

// S'abonner aux événements
WS.subscribe('order.created', (order) => {
console.log('Nouvelle commande reçue !', order);
// Notification instantanée, pas de sondage !
});

WS.subscribe('content.updated', (content) => {
console.log('Contenu mis Ă  jour !', content);
// Mettre à jour l'interface utilisateur immédiatement
});

Avantages :

  • 🔋 Efficace - Une seule connexion persistante
  • 📡 En temps rĂ©el - Mises Ă  jour instantanĂ©es, pas de dĂ©lai
  • ⏱️ Faible latence - Livraison de notifications en moins d'une seconde
  • 🖥️ Charge rĂ©duite - Le serveur pousse uniquement lorsque c'est nĂ©cessaire

✨ Concepts Clés​

Qu'est-ce que WebSocket ?​

WebSocket est une connexion bidirectionnelle persistante entre le client et le serveur :

  • Connexion Persistante - Reste ouverte, pas de poignĂ©es de main rĂ©pĂ©tĂ©es
  • Bidirectionnelle - Le client et le serveur peuvent envoyer des messages
  • En Temps RĂ©el - Livraison instantanĂ©e des messages
  • BasĂ© sur les ÉvĂ©nements - S'abonner Ă  des Ă©vĂ©nements spĂ©cifiques
  • Efficace - Faible surcharge par rapport au sondage HTTP

WebSocket vs Sondage HTTP​

FonctionnalitéWebSocketSondage HTTP
ConnexionPersistante (reste ouverte)Connexions répétées
LatenceMoins d'une secondeDépend de l'intervalle (2-30s)
EfficacitéTrès efficaceGaspillage (de nombreuses réponses vides)
Charge du ServeurFaible (événements uniquement)Élevée (demandes constantes)
Utilisation de la BatterieFaibleÉlevée (appareils mobiles)
Cas d'UtilisationMises à jour en temps réelAcceptable pour des mises à jour non critiques

Cycle de Vie de la Connexion WebSocket​

1. Le client se connecte au serveur WebSocket
(WS.connect())
↓
2. Connexion établie
(l'événement onOpen se déclenche)
↓
3. Le client s'abonne aux événements
(WS.subscribe('event.name', callback))
↓
4. Le serveur envoie des événements lorsqu'ils se produisent
(Livraison instantanée)
↓
5. Le client reçoit des messages d'événements
(La fonction de rappel s'exécute)
↓
6. La connexion reste ouverte
(Pas besoin de reconnexion)
↓
7. Le client se déconnecte lorsqu'il a terminé
(WS.disconnect())

Événements WebSocket Courants​

Type d'ÉvénementDescriptionCas d'Utilisation
order.createdNouvelle commande passéeAfficher la notification "Nouvelle Commande !"
order.updatedChangement de statut de commandeMettre Ă  jour le statut de la commande dans l'interface utilisateur
content.publishedNouveau contenu publiéRafraîchir la liste de contenu
content.updatedContenu éditéMettre à jour le contenu affiché
user.registeredNouvel utilisateur inscritAfficher le nouvel utilisateur dans le tableau de bord admin
payment.completedPaiement traitéMettre à jour le statut de la commande à "Payé"
product.outOfStockProduit en rupture de stockAfficher le badge "Rupture de Stock"

Pourquoi Utiliser le Module WebSocket ?​

AvantageDescription
Mises à Jour en Temps RéelNotifications instantanées, pas de délai de sondage
EfficaceUne seule connexion, faible surcharge
Amical pour la BatteriePas de sondage constant sur mobile
ScalableLe serveur pousse uniquement lorsque c'est nécessaire
Basé sur les ÉvénementsS'abonner à des événements spécifiques
Fonctionnalités en DirectActiver le chat, les notifications, les tableaux de bord

🚀 Exemple Rapide​


📋 Ce Que Vous Devez Savoir​

Gestion de la Connexion WebSocket​

Les connexions WebSocket doivent être gérées avec soin :

Meilleures pratiques :

  • VĂ©rifiez l'Ă©tat de la connexion avant de vous abonner
  • ImplĂ©mentez une logique de reconnexion
  • GĂ©rez les erreurs de connexion avec grâce
  • DĂ©connectez-vous lorsque l'utilisateur se dĂ©connecte

Gestion de l'Abonnement aux Événements​

Abonnez-vous aux événements uniquement après que la connexion soit établie

Meilleures pratiques :

  • Utilisez des fonctions de rappel nommĂ©es pour faciliter la dĂ©sinscription
  • Abonnez-vous après que la connexion soit ouverte
  • DĂ©sabonnez-vous lorsque le composant se dĂ©monte
  • Ne vous abonnez pas au mĂŞme Ă©vĂ©nement plusieurs fois

Désinscription des Événements​

Désabonnez-vous toujours lorsque vous avez terminé pour éviter les fuites de mémoire :

Meilleures pratiques :

  • DĂ©sabonnez-vous dans les fonctions de nettoyage
  • DĂ©connectez WebSocket lorsqu'il n'est pas nĂ©cessaire
  • Évitez les fuites de mĂ©moire dans les SPA

Stratégie de Reconnexion​

Implémentez une reconnexion automatique avec un backoff exponentiel :

Meilleures pratiques :

  • Utilisez un backoff exponentiel pour la reconnexion
  • Limitez le nombre maximum de tentatives de reconnexion
  • RĂ©initialisez les compteurs lors d'une connexion rĂ©ussie
  • Autorisez une dĂ©connexion manuelle sans reconnexion

Structure de la Charge Utile de l'Événement​

Les charges utiles des événements suivent une structure cohérente :

Meilleures pratiques :

  • Validez la structure de la charge utile de l'Ă©vĂ©nement
  • GĂ©rez les champs manquants avec grâce
  • VĂ©rifiez le type de la charge utile en TypeScript

Gestion des Erreurs​

Implémentez une gestion des erreurs complète :

Meilleures pratiques :

  • Attrapez les erreurs dans les gestionnaires d'Ă©vĂ©nements
  • Enregistrez les erreurs pour le dĂ©bogage
  • Affichez des messages d'erreur conviviaux
  • Ne laissez pas les erreurs faire planter l'application

Optimisation des Performances​

Optimisez les performances de WebSocket :

Meilleures pratiques :

  • Limitez la frĂ©quence des Ă©vĂ©nements
  • Regroupez plusieurs mises Ă  jour ensemble
  • DĂ©bounsez les mises Ă  jour de l'interface utilisateur
  • Évitez les opĂ©rations coĂ»teuses dans les gestionnaires

💡 Notes Importantes​

⚠️ Gestion de l'État de Connexion​

Vérifiez toujours l'état de la connexion avant de vous abonner

🔄 Gestion de la Reconnexion​

Les connexions WebSocket peuvent se déconnecter de manière inattendue :

  • Changements de rĂ©seau (WiFi Ă  cellulaire)
  • RedĂ©marrages du serveur
  • DĂ©lai d'inactivitĂ©

Implémentez toujours une logique de reconnexion

🧹 Prévention des Fuites de Mémoire​

Désabonnez-vous lorsque vous avez terminé pour éviter les fuites de mémoire

🔒 Sécurité​

Les connexions WebSocket sont authentifiées :

  • Authentification par jeton (comme pour l'API REST)
  • Protocole WebSocket sĂ©curisĂ© (WSS)
  • Pas besoin d'envoyer le jeton avec chaque message

Meilleures pratiques :

  • Utilisez WSS (WebSocket sĂ©curisĂ©) en production
  • Ne pas exposer de donnĂ©es sensibles dans les gestionnaires d'Ă©vĂ©nements
  • Validez les charges utiles des Ă©vĂ©nements avant de les traiter

📱 Considérations Mobiles​

WebSocket sur les appareils mobiles :

  • Utilisation de la batterie (efficace, mais connexion persistante)
  • Les connexions en arrière-plan peuvent ĂŞtre interrompues
  • Les changements de rĂ©seau nĂ©cessitent une reconnexion

Meilleures pratiques :

  • Reconnectez-vous lorsque l'application revient au premier plan
  • GĂ©rez les changements d'Ă©tat du rĂ©seau
  • Envisagez le sondage pour des mises Ă  jour non critiques sur mobile

📊 Tableau de Référence Rapide​

MéthodeDescriptionCas d'Utilisation
connect()Se connecter au serveur WebSocketÉtablir la connexion

❓ Questions Fréquemment Posées (FAQ)​

Comment puis-je me connecter au serveur WebSocket ?​

Utilisez WS.connect() pour établir une connexion. Attendez que la connexion s'ouvre (écoutez l'événement onOpen) avant de vous abonner aux événements. La connexion est authentifiée à l'aide de votre jeton d'application de defineOneEntry().


À quels événements puis-je m'abonner ?​

Abonnez-vous à des événements comme order.created, order.updated, content.published, payment.completed, user.registered, etc. Les événements disponibles dépendent de votre configuration OneEntry et de la configuration du module Events dans le panneau d'administration.


Comment gérer les déconnexions ?​

Implémentez une reconnexion automatique avec un backoff exponentiel. Écoutez les événements onClose et onError, puis essayez de vous reconnecter après un délai (par exemple, 1s, 2s, 4s, 8s, jusqu'à un maximum de 30s). Réinitialisez le compteur de délai lors d'une connexion réussie.


Dois-je utiliser WebSocket ou le sondage pour mon application ?​

Utilisez WebSocket pour des fonctionnalités en temps réel (chat en direct, notifications, tableaux de bord) où les mises à jour instantanées sont importantes. Utilisez le sondage pour des mises à jour non critiques ou lorsque les connexions WebSocket posent problème (pare-feu restrictifs, mode arrière-plan mobile).


Comment puis-je éviter les fuites de mémoire avec les abonnements WebSocket ?​

Désabonnez-vous toujours des événements lorsque les composants se démontent ou lorsque la connexion n'est plus nécessaire. Dans React, utilisez des fonctions de nettoyage dans useEffect. Dans Vue, utilisez le hook de cycle de vie beforeUnmount.


Puis-je utiliser WebSocket sur des appareils mobiles ?​

Oui, mais soyez conscient que les systèmes d'exploitation mobiles peuvent interrompre les connexions WebSocket en arrière-plan. Reconnectez-vous lorsque l'application revient au premier plan. Considérez l'impact sur la batterie des connexions persistantes sur les appareils mobiles.


🎓 Meilleures Pratiques​

  • VĂ©rifiez l'Ă©tat de la connexion - Abonnez-vous uniquement après l'ouverture de la connexion
  • ImplĂ©mentez la reconnexion - Reconnexion automatique en cas de dĂ©connexion avec un backoff exponentiel
  • DĂ©sabonnez-vous lors du nettoyage - Évitez les fuites de mĂ©moire dans les SPA
  • GĂ©rez les erreurs avec grâce - Attrapez les erreurs dans les gestionnaires d'Ă©vĂ©nements
  • Limitez la frĂ©quence des Ă©vĂ©nements - Évitez de submerger l'interface utilisateur avec des mises Ă  jour
  • Validez les charges utiles des Ă©vĂ©nements - VĂ©rifiez la structure des donnĂ©es avant de les traiter
  • Utilisez des rappels nommĂ©s - Plus facile Ă  dĂ©sabonner et Ă  dĂ©boguer
  • Enregistrez l'Ă©tat de la connexion - Suivez les Ă©vĂ©nements d'ouverture/fermeture/erreur pour le dĂ©bogage

Plus d'informations sur l'interface utilisateur du module https://doc.oneentry.cloud/docs/events/introduction


Définition du module WS​

Vous pouvez vous abonner à des événements via WebSocket pour recevoir des notifications


const { WS } = defineOneEntry(
"your-project-url", {
"token": "your-app-token"
}
);


🔗 Documentation Connexe​