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 connexion bidirectionnelle permanente entre un client (application iOS/macOS) et un serveur. Contrairement à HTTP, une fois la connexion établie, les données peuvent être transmises en temps réel sans requêtes répétées. Pour Swift, il existe deux approches principales : l'utilisation de URLSessionWebSocketTask intégré (disponible depuis iOS 13/macOS 10.15) et la bibliothèque tierce Starscream (qui prend en charge les versions plus anciennes et offre des fonctionnalités avancées).



1. URLSessionWebSocketTask — WebSocket natif en Swift



Depuis iOS 13 et macOS 10.15, Apple a ajouté la prise en charge de WebSocket directement dans URLSession. Cela signifie que pour les scénarios de base, aucune dépendance supplémentaire n'est nécessaire.



Exemple de connexion et d'envoi de message



import Foundation

class WebSocketManager: NSObject { private var webSocketTask: URLSessionWebSocketTask? private let session = URLSession(configuration: .default) 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.count) octets") @unknown default: break } self?.receiveMessage() // continuer à écouter case .failure(let error): print("Erreur de réception : \\(error.localizedDescription)") } } } func disconnect() { webSocketTask?.cancel(with: .normalClosure, reason: nil) }}


Avantages de URLSessionWebSocketTask

  • Sans dépendances — tout est déjà dans le système.
  • Intégration native avec les tâches en arrière-plan et App Transport Security.
  • Prise en charge par Apple et mises à jour avec le système d'exploitation.


Inconvénients

  • Version minimale iOS 13 / macOS 10.15.
  • Absence de prise en charge intégrée de la reconnexion et du ping/pong (à implémenter manuellement).
  • Moins de flexibilité dans la configuration.


2. Starscream — une bibliothèque WebSocket puissante et flexible pour Swift



Starscream est la bibliothèque WebSocket tierce la plus populaire pour Swift. Elle prend en charge iOS 8+, macOS 10.10+, ainsi que watchOS et tvOS. Starscream offre un mécanisme de reconnexion intégré, un ping/pong automatique et la prise en charge de SSL/TLS.



Installation via Swift Package Manager

// Dans Package.swift ou via Xcode : File → Add Packages...// URL : https://github.com/daltoniam/Starscream.git// Version : à partir de 4.0.0 et supérieure


Exemple d'utilisation de Starscream



import Starscream

class StarscreamManager: WebSocketDelegate { var socket: WebSocket? func setupConnection() { var request = URLRequest(url: URL(string: "wss://echo.websocket.org")!) request.timeoutInterval = 5 socket = WebSocket(request: request) socket?.delegate = self socket?.connect() }\

Recommendations