WebSocket en Swift : créer des applications temps réel pour iOS et macOS

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

Introduction à WebSocket en Swift : de la théorie à la pratique



Les applications mobiles et de bureau modernes nécessitent de plus en plus souvent un transfert instantané des données. Qu'il s'agisse d'un chat, d'un terminal boursier, d'un jeu en ligne ou d'un système de surveillance — les utilisateurs s'attendent à ce que les informations soient mises à jour en temps réel sans avoir à rafraîchir constamment l'écran. C'est là que le protocole WebSocket vient à la rescousse.



Contrairement à une requête HTTP classique qui fonctionne sur le principe « requête-réponse », WebSocket établit une connexion bidirectionnelle permanente entre le client et le serveur. Cela signifie que le serveur peut envoyer des données au client à tout moment sans requête préalable. Dans l'écosystème Apple, pour travailler avec WebSocket, on dispose à la fois de solutions natives (URLSessionWebSocketTask) et de bibliothèques tierces populaires, comme Starscream.



Dans cet article, nous allons voir comment intégrer WebSocket dans votre application Swift pour iOS et macOS, écrire des exemples de code fonctionnels et examiner les meilleures pratiques.



1. Implémentation native de WebSocket via URLSession



Depuis iOS 13 et macOS 10.15, Apple fournit un support intégré pour WebSocket via la classe URLSessionWebSocketTask. C'est la méthode la plus simple et recommandée, qui ne nécessite pas l'installation de dépendances tierces.



Création et configuration de la connexion



Pour commencer, il faut créer une instance de URLSession et définir sa configuration. Ensuite, nous formons une URL avec le protocole ws:// (ou wss:// pour une connexion sécurisée) et créons une tâche WebSocket.



import Foundation

class WebSocketManager: NSObject { private var webSocketTask: URLSessionWebSocketTask? private let session: URLSession override init() { let config = URLSessionConfiguration.default self.session = URLSession(configuration: config, delegate: nil, delegateQueue: OperationQueue()) super.init() } func connect() { guard let url = URL(string: "wss://echo.websocket.org") else { return } webSocketTask = session.webSocketTask(with: url) webSocketTask?.resume() receiveMessage() } func disconnect() { webSocketTask?.cancel(with: .normalClosure, reason: nil) }}


Envoi et réception de messages



WebSocket prend en charge l'envoi de messages textuels (URLSessionWebSocketTask.Message.string) ainsi que de données binaires (.data). Pour recevoir des messages, il est nécessaire d'appeler récursivement la méthode receive, car elle ne traite qu'un seul message à la fois.



extension WebSocketManager {    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("Message texte reçu : \\(text)")                case .data(let data):                    print("Données binaires reçues : \\(data.count) octets")                @unknown default:                    print("Type de message inconnu")                }                // Continuer à écouter récursivement                self?.receiveMessage()            case .failure(let error):                print("Erreur de réception : \\(error.localizedDescription)")            }        }    }}


Notez l'appel récursif à receiveMessage() à l'intérieur de la closure de succès — cela garantit que votre application continuera à recevoir de nouvelles données.

Blogs

Book Recommendations