Bibliothèques WebSocket Swift : Starscream et URLSessionWebSocketTask

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Bibliothèques WebSocket pour Swift (iOS/macOS) : Starscream et URLSessionWebSocketTask



WebSocket est un protocole assurant une communication bidirectionnelle entre un client et un serveur via une seule connexion TCP. Dans l'écosystème Swift (iOS/macOS), il existe deux approches principales pour travailler avec WebSocket : l'implémentation native URLSessionWebSocketTask (disponible depuis iOS 13/macOS 10.15) et la bibliothèque tierce populaire Starscream. Les deux permettent de créer des applications réactives en temps réel : chats, flux de cotations, jeux multijoueurs, etc.



Implémentation native URLSessionWebSocketTask

Avec la sortie d'iOS 13, Apple a ajouté la prise en charge intégrée de WebSocket dans le framework Foundation. Cela évite d'avoir à ajouter des dépendances tierces si votre application cible les versions modernes du système d'exploitation.



Fonctionnalités principales :

  • Fonctionnement entièrement asynchrone via async/await ou les callbacks
  • Gestion automatique du cycle de vie de la connexion
  • Prise en charge de closeCode, closeReason pour une fermeture correcte
  • Intégration native avec URLSession (prise en charge des timeouts, des politiques de cache)


Exemple de connexion et d'envoi de message :

import Foundation

class WebSocketManager { private var webSocketTask: URLSessionWebSocketTask? private let session = URLSession.shared func connect() { guard let url = URL(string: "wss://echo.websocket.org") else { return } webSocketTask = session.webSocketTask(with: url) webSocketTask?.resume() receiveMessage() } func sendMessage(_ text: String) { let message = URLSessionWebSocketTask.Message.string(text) webSocketTask?.send(message) { error in if let error = error { print("Erreur d'envoi : \\(error.localizedDescription)") } } } private func receiveMessage() { webSocketTask?.receive { [weak self] result in switch result { case .success(let message): switch message { case .string(let text): print("Reçu : \\(text)") case .data(let data): print("Données binaires reçues : \\(data)") @unknown default: fatalError() } // On continue d'écouter self?.receiveMessage() case .failure(let error): print("Erreur de réception : \\(error)") // Reconnexion éventuelle } } } func disconnect() { webSocketTask?.cancel(with: .normalClosure, reason: nil) }}


Starscream — une bibliothèque flexible et éprouvée

Starscream est une bibliothèque WebSocket open-source pour Swift, écrite par Dalton Cherry et maintenue par la communauté. Elle fonctionne sur iOS, macOS, tvOS et watchOS, y compris sur des versions plus anciennes (iOS 8+). Starscream offre plus de contrôle sur la connexion et prend en charge des fonctionnalités supplémentaires telles que la compression (permessage-deflate) et les en-têtes personnalisés.



Installation via Swift Package Manager :

// Dans Package.swift ou via Xcode : File → Swift Packages → Add Package Dependency.package(url: "https://github.com/daltoniam/Starscream.git", from: "4.0.0")


Fonctionnalités principales :

  • Prise en charge de WebSocketDelegate pour tous les événements (connexion, réception de données, erreurs, déconnexion)
  • Gestion manuelle des pings/pongs pour maintenir la connexion
  • Possibilité d'envoyer des données binaires (Data) et des chaînes (String/UTF-8)
  • Prise en charge de SSL/TLS et des certificats auto-signés

Recommendations