Aller au contenu
> 💻 🧠 Code 1001 > ⚡ Philosophie de PowerShell > 🖥️ ⚡Astuces et conseils PowerShell > 📡 Comment utiliser WebSocket pour recevoir des données en temps réel avec PowerShell

📡 Comment utiliser WebSocket pour recevoir des données en temps réel avec PowerShell

  • par

Bien sûr ! Voici la traduction complète en français, en conservant le style et l’exemple PowerShell :


📡 Comment utiliser WebSocket pour recevoir des données en temps réel avec PowerShell

Introduction

Les applications modernes nécessitent souvent des données en temps réel, comme les prix des actions et des cryptomonnaies, les résultats sportifs, les chats en ligne, les dispositifs IoT et les notifications. Les requêtes HTTP classiques sont inefficaces pour ces tâches : le client doit interroger constamment le serveur, ce qui consomme de la bande passante et entraîne des délais d’attente pour les mises à jour.

WebSocket résout ce problème : c’est un protocole permettant une connexion persistante et bidirectionnelle entre le client et le serveur. Le serveur peut envoyer de nouvelles données au client, et le client peut envoyer des commandes ou s’abonner à des canaux spécifiques.

Une analogie simple : vous appelez un ami (handshake), votre ami vérifie qui appelle et accepte l’appel (authentification), et la ligne reste ouverte, permettant l’échange de messages (flux de données).

Les avantages de WebSocket incluent une connexion persistante sans requêtes répétées, une livraison quasi instantanée des données, une efficacité des ressources et une communication bidirectionnelle.


Connexion à WebSocket : Exemple avec Cryptocompare

Cryptocompare fournit des données de cryptomonnaies en streaming via WebSocket. Par exemple, vous pouvez vous abonner au flux BTC/USD.

Voici un client WebSocket universel en PowerShell

# =================================================================================
# WebSocket-Client.ps1 — Client WebSocket universel pour données en temps réel
# Windows PowerShell >= 5.1
# Auteur: hypo69
# Créé: 13/09/2025
# =================================================================================

# =================================================================================
# LICENCE (MIT)
# =================================================================================
<#
Licence MIT : https://opensource.org/licenses/MIT
#>

function Start-WebSocketClient {
<#
.SYNOPSIS
    Client WebSocket universel avec support de reconnexion et journalisation.

.DESCRIPTION
    Se connecte à un serveur WebSocket, envoie un message d’abonnement et affiche
    les messages entrants dans la console. Reconnexion automatique en cas de perte de connexion.

.PARAMETER Url
    URL du serveur WebSocket (exemple : "wss://streamer.cryptocompare.com/v2?api_key=VOTRE_API_KEY").

.PARAMETER SubscribeMessage
    Message d’abonnement en JSON à envoyer au serveur.

.PARAMETER ReconnectDelay
    Délai en secondes avant de se reconnecter. Par défaut, 5 secondes.

.EXAMPLE
    $Url = "wss://streamer.cryptocompare.com/v2?api_key=VOTRE_API_KEY"
    $SubscribeMessage = '{"action":"SubAdd","subs":["5~CCCAGG~BTC~USD"]}'
    Start-WebSocketClient -Url $Url -SubscribeMessage $SubscribeMessage -ReconnectDelay 5
#>
    [CmdletBinding()]
    param(
        [Parameter(Mandatory, HelpMessage = "Spécifiez l'URL du serveur WebSocket.")]
        [string]$Url,

        [Parameter(Mandatory, HelpMessage = "Message d’abonnement en JSON.")]
        [string]$SubscribeMessage,

        [Parameter(Mandatory = $false, HelpMessage = "Délai de reconnexion en secondes.")]
        [int]$ReconnectDelay = 5
    )

    while ($true) {
        try {
            $ws = [System.Net.WebSockets.ClientWebSocket]::new()
            $uri = [Uri] $Url
            $ws.ConnectAsync($uri, [Threading.CancellationToken]::None).Wait()
            Write-Host "✅ Connecté à $Url" -ForegroundColor Green

            if ($SubscribeMessage) {
                $bytes = [System.Text.Encoding]::UTF8.GetBytes($SubscribeMessage)
                $buffer = [System.ArraySegment[byte]]::new($bytes)
                $ws.SendAsync($buffer, [System.Net.WebSockets.WebSocketMessageType]::Text, $true, [Threading.CancellationToken]::None).Wait()
                Write-Host "➡ Abonnement envoyé : $SubscribeMessage" -ForegroundColor Cyan
            }

            $bufferSize = 1024
            $buffer = New-Object byte[] $bufferSize
            $segment = [System.ArraySegment[byte]]::new($buffer)

            while ($ws.State -eq [System.Net.WebSockets.WebSocketState]::Open) {
                $receiveTask = $ws.ReceiveAsync($segment, [Threading.CancellationToken]::None)
                $receiveTask.Wait()
                $message = [System.Text.Encoding]::UTF8.GetString($buffer, 0, $receiveTask.Result.Count)
                Write-Host "📩 Reçu : $message"
            }
        }
        catch {
            Write-Host "⚠ Erreur : $_" -ForegroundColor Red
        }

        Write-Host "⏳ Reconnexion dans $ReconnectDelay secondes..." -ForegroundColor Yellow
        Start-Sleep -Seconds $ReconnectDelay
    }
}

# =================================================================================
# --- EXEMPLE D’UTILISATION ---
# =================================================================================
# Décommentez et remplacez VOTRE_API_KEY par votre clé API Cryptocompare
# $Url = "wss://streamer.cryptocompare.com/v2?api_key=VOTRE_API_KEY"
# $SubscribeMessage = '{"action":"SubAdd","subs":["5~CCCAGG~BTC~USD"]}'
# Start-WebSocketClient -Url $Url -SubscribeMessage $SubscribeMessage -ReconnectDelay 5

Cette approche présente plusieurs avantages. Elle est universelle et fonctionne avec n’importe quel flux WebSocket, pas seulement un service spécifique. La reconnexion automatique garantit que le client rétablit la connexion en cas de perte. Le script est facilement adaptable à différents canaux ou types de données en modifiant simplement le message d’abonnement. De plus, il peut être étendu : ajout de journalisation dans un fichier, filtrage des messages entrants, traitement du JSON ou intégration avec une base de données.


Explication du code

  1. [System.Net.WebSockets.ClientWebSocket] — classe .NET pour se connecter à un WebSocket.
  2. ConnectAsync — établit la connexion avec le serveur.
  3. SendAsync — envoie le message d’abonnement au serveur.
  4. ReceiveAsync — reçoit les messages entrants.
  5. Reconnexion automatique — implémentée via une boucle infinie while ($true) et Start-Sleep.
  6. Journalisation — affiche les messages dans la console avec codage couleur.

Recommandations

  1. Utilisez toujours une connexion sécurisée wss://.
  2. Vérifiez vos clés API et tokens d’authentification.
  3. Filtrez uniquement les données dont vous avez besoin.
  4. Pour les flux volumineux, stockez les messages dans un fichier ou une base de données.
  5. Testez à l’avance la reconnexion et la gestion des erreurs.
Étiquettes:

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *