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/awaitou les callbacks - Gestion automatique du cycle de vie de la connexion
- Prise en charge de
closeCode,closeReasonpour 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
WebSocketDelegatepour 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
Aussi dans la bibliothèque
Travailler avec les jetons JWT en TypeScript : bibliothèque jsonwebtoken et guide complet
Envoi d'email en Rust : bibliothèques lettre et mailparse pour les courriels
Framework CLI pour Rust : Clap — un outil puissant et pratique pour créer des applications console