IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

L'API Websockets ce que c'est et comment l'utiliser

Le , par TiranusKBX

0PARTAGES

Websockets174544

Présentation
WebSocket est une technologie évoluée qui permet d'ouvrir un canal de communication interactif(bi-directionnel) permanent entre un navigateur (côté client) et un serveur,
afin de résoudre certains problèmes posés par le caractère unidirectionnel et déconnecté du protocole HTTP.
Avec cette API vous pouvez envoyer des messages à un serveur et recevoir ses réponses de manière événementielle sans avoir à aller consulter le serveur pour obtenir une réponse.
La spécification permettant d'utiliser les WebSockets est développée par le W3C, tandis que le protocole de communication est standardisé par l'IETF.

Exemple
Prenons comme exemple un système de chat, celui-ci doit répondre aux postulats suivants:

  • Pouvoir envoyer des messages
  • Pouvoir recevoir des messages
  • tous les messages envoyés sont immédiatement retransmis aux autres participants

    De ce fait vous avez 2 canaux d'ouverts en même temps, l'un pour les envois, l'autre pour la réception

    Point Important




    Il existe 2 version du protocole Websocket(voir à droite)

  • Version standard comme le HTTP
  • Version sécurisée/cryptée comme le HTTPS


    La notation d'une URL Websocket se fait de manière proche à celle d'une connexion http
    et utilise les même ports par défaut, 80 et 443

    Dans le premier cas la notation est ws://url_site[:port]
    et pour la version sécurisée wss://url_site[:port]

    :alerte: les certificats auto-signés sont quasi systématiquement refusés
    :alerte: Impossible d'ouvrir une Websocket standard sur un site en https

    174543



    La Pratique(côté client)

    Maintenant la théorie pleinement exposée passons à la pratique
    et comme pour L'API EventSource la partie client c'est de la tarte mais le serveur on a envie de se pendre
    :arf:

    :alerte: Nous pouvons recevoir aussi bien du binaire que du texte dans les messages; pour une utilisation avec Javascript nous allons donc nous contenter du texte :mrgreen:

    Voici comment Initialiser une Websocket
    exampleSocket = new WebSocket("ws://site_url:8765");
    Voici comment exécuter une action à l'ouverture
    exampleSocket.onopen = function (event) { console.log("/!\\ Connexion serveur"); }
    Voici comment exécuter une action en cas d'erreur
    exampleSocket.onerror = function (event) { console.log(event); }
    Voici comment exécuter une action en cas de réception de données
    exampleSocket.onmessage = function (event) { console.log(event.data); }
    Voici comment exécuter une action en cas de fermeture connexion
    exampleSocket.onclose = function (event) { console.log("/!\\ Déconnexion serveur"); }

    Du coup si l'on veut se faire une fonction de connexion :
    var exampleSocket;

    function connect(){
    exampleSocket = new WebSocket("ws://site_url:8765");
    exampleSocket.onopen = function (event) { console.log("/!\\ Connexion serveur"); }
    exampleSocket.onerror = function (event) { console.log(event); }
    exampleSocket.onmessage = function (event) { console.log(event.data); }
    exampleSocket.onclose = function (event) { console.log("/!\\ Déconnexion serveur"); }
    }

    Maintenant passons aux fonctions non liées à un événement(mais qui en créent)

    Si vous souhaitez ... fermer la connexion
    exampleSocket.close();
    :alerte: en cas de coupure connexion les gestionnaires d’événement(onopen, onerror, onmessage, onclose(sert 1 fois)) deviennent caduques donc si vous devez reconnecter, la fonction de connexion juste au dessus devient très utile

    Si vous souhaitez ... envoyer un message
    exampleSocket.send(data);
    inutile d'essayer d'envoyer un objet JS cette fonction n'accepte que du texte

    Aller plus loin
    Si vous souhaitez vous faire les dents sur un exemple concret voici un serveur websocket en python 3 et la page html pour jouer avec :fleche: 174719(v3)

    :alerte: le code de cette archive est configuré pour des websockets sécurisées si vous n'avez pas de certificat ssl retirez dans le code python
    sslcontext = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
    sslcontext.load_cert_chain("ssl2.crt", "ssl2.key")
    puis faites le remplacement
    # Remplacement de
    start_server = websockets.serve(Loop, 'localhost', 8765, ssl=sslcontext)
    #par
    start_server = websockets.serve(Loop, 'localhost', 8765)

    Quant à la page html remplacez wss:// par ws://


    Sources :fleche: MDN
  • Vous avez lu gratuitement 728 articles depuis plus d'un an.
    Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.

    Une erreur dans cette actualité ? Signalez-nous-la !