Serveur

Documentation détaillée du module Serveur d’images d’ALS

Présentation

Le module utilitaire Server expose les résultats d’ALS via un service HTTP et WebSocket léger.

Il est chargé de :

  • Publier la dernière image empilée et les métriques de session dans le dossier web configuré
  • Servir l’application web de visualisation (index.html, JavaScript et icônes)
  • Diffuser en direct les notifications de nouvelle image aux navigateurs connectés par WebSocket
  • Fournir une URL compatible QR code pour que tablettes et téléphones rejoignent la session rapidement

Le module fonctionne dans sa propre boucle d’événements asyncio et accepte plusieurs clients simultanés. Il n’altère jamais le pipeline de traitement : il se contente de servir les sorties produites par le module Save.

Configuration

Paramètre Source Type de donnée Requis Valeur par défaut
Dossier web Préférences : Onglet Sorties Chemin vers un dossier Oui Alias du dossier de travail
Dossier web dédié Préférences : Onglet Sorties Booléen Non Désactivé
Port Préférences : Onglet Sorties Entier (1024–65535) Oui 8000

Contrôle

Source Type Réponse
Panneau Contrôles principaux Commande : START Prépare les ressources web et lance le thread serveur
Panneau Contrôles principaux Commande : STOP Prévient les clients et arrête proprement le serveur. Les ressources web restent disponibles ; l’UI masque le QR code

Sorties

Une fois démarré, le module maintient les artefacts suivants dans le dossier web :

Artefact Description
index.html Interface embarquée affichant l’image empilée en direct
favicon.ico & icons/*.png Ressources du visualiseur copiées depuis le bundle d’ALS
data.json Métriques de session (STACK_SIZE, EXPO) mises à jour après chaque empilement
web_image.jpg Dernière image traitée sauvegardée en JPEG pour le navigateur
openseadragon.min.js Bibliothèque de visualisation à zoom profond utilisée par l’interface

Comportement

Séquence de démarrage

  1. Valider la disponibilité — le module résout l’adresse IP de l’hôte et vérifie que le port configuré est libre. Un PortInUseError est levé si un autre processus écoute déjà.
  2. Publier les ressources statiquesindex.html, les icônes et l’image d’attente sont écrits (ou rafraîchis) dans le dossier web pour un chargement immédiat des clients.
  3. Exposer les métriques de sessiondata.json est généré avec la taille de stack courante et le temps d’exposition cumulé.
  4. Lancer la boucle serveur — une boucle asyncio démarre dans un thread dédié servant http://<hôte>:<port> et acceptant les connexions WebSocket sur /ws.
  5. Annoncer la disponibilité — l’interface met à jour son statut et le QR code, et journalise l’URL finale.

Si ALS ne peut se lier qu’à 127.0.0.1, le module reste actif mais signale Accès limité au serveur web afin que vous puissiez corriger la connectivité réseau.

Mises à jour en direct

  • Après chaque image traitée, le JPEG courant et data.json sont réécrits dans le dossier web.
  • notify_browsers_about_new_image() envoie { "type": "new_image" } à tous les clients WebSocket pour qu’ils rechargent la texture sans scrutation.
  • La même infrastructure diffuse { "type": "disconnect" } juste avant l’arrêt, permettant aux clients d’afficher un message approprié.

Arrêt

Lorsque la commande STOP est déclenchée :

  1. Tous les clients reçoivent un message disconnect.
  2. Le module attend brièvement (2 secondes) que les navigateurs ferment la connexion.
  3. Le runner asyncio est nettoyé et le thread dédié s’arrête.
  4. L’interface réinitialise le statut et le QR code ; les fichiers statiques restent présents pour la prochaine session.

Référence WebSocket

Message Charge utile Déclencheur
new_image { "type": "new_image" } Une nouvelle image traitée est disponible
disconnect { "type": "disconnect" } Le serveur est en cours d’arrêt