DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Fonctions WLangage / Communication / WebSocket
  • Présentation
  • Principe du serveur de WebSocket
  • Comment utiliser le serveur de WebSocket ?
  • Projet de type "Serveur de WebSocket"
  • Création du projet de type "Serveur de WebSocket"
  • Evénements WLangage spécifiques au projet de type "Serveur de WebSocket"
  • Contextes d'exécution
  • Fonctions WLangage spécifiques pouvant être utilisées dans le projet Serveur de WebSocket
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
Présentation
Le protocole WebSocket vise à développer un canal de communication sur un socket TCP pour les navigateurs et les serveurs Web. Ainsi, il est possible depuis un code navigateur WEBDEV de communiquer et d'échanger des messages avec un serveur Web.
Le serveur de WebSocket fourni avec WEBDEV fonctionne sous Windows uniquement et avec IIS (version minimale IIS8).
A partir de la version 27, il est possible de se connecter à un serveur de Websocket via une application WINDEV (Windows ou Linux) ou une application WINDEV Mobile (Android ou iOS).
Principe du serveur de WebSocket
Dans une application ou un site Web, le client envoie une requête au serveur et le serveur lui renvoie la réponse, par exemple le contenu de la page demandée.
L'utilisation d'un WebSocket permet la transmission en temps réel des données associées au site Web (par exemple, transmission des messages dans un site de messagerie instantanée). Avec le protocole WebSocket, il suffit au client d'établir la connexion avec un serveur Web. Une fois établi, le canal de communication reste ouvert.
Le serveur peut transmettre au client, de sa propre initiative, toutes les informations qu'il estime utiles. Si de nouvelles informations sont disponibles sur le serveur, le client n'a pas à émettre de requête.
Comment utiliser le serveur de WebSocket ?
Pour utiliser le serveur de WebSocket, vous devez :
  1. Installer le Serveur d'application WEBDEV 2024, qui permet d'administrer les serveurs de WebSocket (via l'onglet "WebSockets").
    Remarque : La version minimale requise est la version 26 du Serveur d'application WEBDEV.
  2. Créer un projet WEBDEV de type "Serveur de WebSocket". Ce projet est déployé sur le serveur Web (où le Serveur d'application WEBDEV a été installé). Il attend les connexions qui lui sont envoyées suivant le protocole WebSocket. Cette application tourne donc en tâche de fond sur le serveur.
  3. Créer le projet qui va interroger le serveur de WebSocket. Ce projet permet d'envoyer des messages au serveur de WebSocket et si nécessaire de traiter les réponses, grâce aux fonctions Socketxxx. Ce projet peut être :
    • Un projet WEBDEV.
    • Un projet WINDEV.
    • Un projet WINDEV Mobile (Android ou iOS).
  4. La connexion au serveur de WebSocket pourra être effectuée depuis le projet "client" via les fonctions suivantes :
    WebSocketClientConnectePermet d'établir une connexion avec un serveur de Websocket.
    WebSocketClientConnecteSSLPermet d'établir une connexion sécurisée SSL avec un serveur de Websocket.
Remarque : Le Serveur de WebSocket WEBDEV peut être utilisé avec tout langage qui supporte ce protocole.
Projet de type "Serveur de WebSocket"

Création du projet de type "Serveur de WebSocket"

Pour créer un projet de type "Serveur de WebSocket" :
  1. Affichez la page d'accueil de WEBDEV (en utilisant par exemple le raccourci CTRL + <).
  2. Cliquez sur le bouton "Créer un projet", puis cliquez sur "Serveur de WebSocket".
  3. L'assistant de création de projet se lance.
  4. Indiquez le nom du projet et suivez les différents étapes de la création du projet (pour plus de détails, consultez Créer un projet WEBDEV).
  5. Terminez l'assistant : le projet est automatiquement créé.
Attention : Ce projet ne doit pas utiliser de composants (ni internes ni externes), ni charger des bibliothèques (WDL).

Evénements WLangage spécifiques au projet de type "Serveur de WebSocket"

Plusieurs événements WLangage spécifiques sont associés au projet :
EvénementConditions d'exécution
Service global (traitement en boucle)Cet événement est l'événement principal du serveur de WebSocket. Il est appelé en boucle quand le serveur de WebSocket est démarré.
Cet événement permet par exemple d'envoyer un message à un ou plusieurs clients en fonction d'un paramètre lu dans un fichier de données.
Il est possible d'indiquer l'intervalle d'exécution de cet événement via la syntaxe suivante :
PROCÉDURE ServiceGlobal()<intervalle=<Durée>>
où <Durée> est l'intervalle d'exécution de l'événement. Ce paramètre peut correspondre à un entier correspondant au nombre de millisecondes ou l'indication directe de la durée (par exemple '20 s' ou '10 ms'). Par défaut, cet événement est exécuté toutes les 10 secondes.
Dans cet événement, il est possible d'utiliser la fonction WebSocketListeClientConnecté pour connaître la liste des clients connectés au moment de l'exécution de la fonction (attention, cette liste peut être différente à chaque instant).
Nouvelle connexionExécuté lors de la demande de connexion d'un client (via la fonction SocketConnecte).
Rappel : Le client est un site Web. La demande de connexion va s'effectuer depuis le code navigateur d'une page Web.
Cet événement est un événement acceptant des paramètres. Cet événement est de la forme :
PROCÉDURE Connexion(Client est un websocketClient)
où <Client> correspond à une variable de type websocketClient, contenant les caractéristiques du client.
Réception d'un message d'un clientExécuté lors de l'envoi d'un message au serveur de WebSocket par le client (via la fonction SocketEcrit).
Cet événement est un événement acceptant des paramètres. Cet événement est de la forme :
PROCÉDURE ReceptionMessage(Client est un websocketClient,
vMessage est un Variant)
où :
  • <Client> correspond à une variable de type websocketClient, contenant les caractéristiques du client.
  • <vMessage> correspond au message envoyé par le client. Le type réel de la valeur stockée est soit une chaîne Unicode, soit un Buffer (<vMessage>.Type).
Déconnexion d'un clientExécuté lors de la déconnexion du client (via la fonction SocketFerme).
Cet événement est un événement acceptant des paramètres. Cet événement est de la forme :
PROCÉDURE Deconnexion(Client est un websocketClient)
où <Client> correspond à une variable de type websocketClient, contenant les caractéristiques du client.
Arrêt du service globalExécuté à l'arrêt du service global.

Remarque : Pour éditer les événements spécifiques d'un projet : sous le volet "Accueil", dans le groupe "Général", déroulez et sélectionnez "Code du projet".

Contextes d'exécution

Le service global du serveur de WebSocket et les clients connectés s'exécutent indépendamment. Chacun s'exécute dans son propre contexte avec :
  • sa propre copie des variables globales.
  • son propre contexte de base de données.
  • etc.
Il n'est donc pas possible de manipuler directement le contexte global ou le contexte d'un autre client depuis un autre contexte.
La fonction WebSocketExécute permet d'exécuter une procédure globale dans le contexte d'un client connecté au Serveur de WebSocket. Dans ce cas-là, le contexte d'exécution est bien celui du client : pendant l'exécution de la procédure globale, les variables globales vues seront celles du client spécifié.
La fonction WebSocketExécuteServiceGlobal permet d'exécuter une procédure globale dans le contexte global du serveur de WebSocket. Pendant l'exécution de la procédure globale, les variables globales vues seront celles du service global.
Attention : Il peut être nécessaire de paramétrer l'intervalle de temps entre deux appels du service global pour que la procédure puisse s'exécuter.

Fonctions WLangage spécifiques pouvant être utilisées dans le projet Serveur de WebSocket

Les fonctions spécifiques pouvant être utilisées dans le serveur de WebSocket sont les suivantes :
WebSocketDéconnecteDéconnecte un client actuellement connecté sur un serveur de WebSocket.
WebSocketEnvoieEnvoie un message pour un client du serveur de WebSocket.
WebSocketExécuteExécute une procédure dans le contexte d'un client connecté au serveur de WebSocket.
WebSocketExécuteServiceGlobalExécute une procédure globale dans le contexte du service global du serveur de WebSocket.
WebSocketListeClientConnectéListe les clients connectés au serveur de WebSocket.
Version minimum requise
  • Version 26
Documentation également disponible pour…
Commentaires
et un exemple ?
Ce serait possible d'avoir un jour un exemple concret ? parce que j'ai beau essayé dans tous les sens, rien ne marche.
HLM
28 aoû. 2021

Dernière modification : 07/07/2023

Signaler une erreur ou faire une suggestion | Aide en ligne locale