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

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é
Adresse affichée Préférences : Onglet Sorties Chaîne (auto ou ip:<adresse>) Oui Auto - recommandé
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 le serveur. Les ressources web restent disponibles sur le disque

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. 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.
  2. Exposer les métriques de sessiondata.json est généré avec la taille de stack courante et le temps d’exposition cumulé.
  3. Valider la disponibilité — le module tente la liaison réelle du serveur sur 0.0.0.0:<port>. Un PortInUseError est levé si le port configuré ne peut pas être utilisé.
  4. Lancer la boucle serveur — une boucle asyncio démarre dans un thread dédié, sert HTTP sur toutes les interfaces IPv4 locales et accepte les connexions WebSocket sur /ws.
  5. Annoncer la disponibilité — ALS résout la préférence Adresse affichée configurée et met à jour son interface avec l’adresse sélectionnée.

Liaison et adresse affichée

L’adresse de liaison et l’adresse affichée sont volontairement séparées :

  • Le serveur se lie à 0.0.0.0 pour accepter les connexions depuis toute interface IPv4 locale disponible.
  • L’Adresse affichée est une adresse locale concrète qu’un autre appareil peut utiliser pour naviguer vers le serveur d’images.

Si l’Adresse affichée sélectionnée est une adresse loopback, le module reste actif mais signale que l’accès au serveur d’images est limité afin que vous puissiez choisir une autre Adresse affichée lorsqu’une autre adresse est disponible.

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