WebSocket in Swift: Echtzeitanwendungen von A bis Z

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum WebSocket für Swift-Entwickler wichtig ist

Moderne mobile und Desktop-Anwendungen erfordern zunehmend einen sofortigen Datenaustausch. Ob Chat, Börsenterminal, Online-Spiel oder Push-Benachrichtigungssystem – die Nutzer erwarten Reaktionen in Echtzeit. Das Protokoll WebSocket hat sich zum Standard für solche Aufgaben entwickelt, und im Swift-Ökosystem (iOS/macOS) wird seine Unterstützung nativ über URLSessionWebSocketTask bereitgestellt.

In diesem Artikel werden wir den gesamten Arbeitszyklus mit WebSocket in Swift durchgehen: von der Verbindungseinrichtung bis zur Erstellung einer vollwertigen Echtzeitanwendung. Sie erfahren, wie Sie typische Fehler vermeiden, die Wiederverbindung organisieren und WebSocket in die MVVM-Architektur integrieren.



Grundlagen von WebSocket in Swift: URLSessionWebSocketTask

Ab iOS 13 und macOS 10.15 bietet Apple die integrierte Klasse URLSessionWebSocketTask im Rahmen von Foundation an. Dies erspart die Notwendigkeit, für grundlegende Szenarien externe Bibliotheken (z. B. Starscream) einzubinden.



Erstellen einer WebSocket-Verbindung

Zum Aufbau einer Verbindung müssen Sie eine URLSession-Sitzung erstellen und eine Konfiguration festlegen:

import Foundation

class WebSocketManager { private var webSocketTask: URLSessionWebSocketTask? private let session: URLSession init() { let config = URLSessionConfiguration.default config.timeoutIntervalForRequest = 30 config.waitsForConnectivity = true session = URLSession(configuration: config, delegate: self, delegateQueue: OperationQueue()) } func connect() { guard let url = URL(string: "wss://echo.websocket.org") else { return } webSocketTask = session.webSocketTask(with: url) webSocketTask?.resume() receiveMessage() }}

Beachten Sie waitsForConnectivity – dies ermöglicht die automatische Wiederherstellung der Verbindung, sobald das Netzwerk verfügbar ist.



Senden und Empfangen von Nachrichten

WebSocket unterstützt zwei Nachrichtentypen: Text (String) und binär (Data). Betrachten wir ein Beispiel zum Senden:

func sendMessage(_ text: String) {    let message = URLSessionWebSocketTask.Message.string(text)    webSocketTask?.send(message) { error in        if let error = error {            print("Fehler beim Senden: \\(error.localizedDescription)")        }    }}

func sendData(_ data: Data) { let message = URLSessionWebSocketTask.Message.data(data) webSocketTask?.send(message) { error in // Fehlerbehandlung }}

Zum Empfangen von Nachrichten wird ein rekursiver Aufruf von receive verwendet:

private func receiveMessage() {    webSocketTask?.receive { [weak self] result in        switch result {        case .success(let message):            switch message {            case .string(let text):                print("Text empfangen: \\(text)")            case .data(let data):                print("Daten empfangen: \\(data.count) Bytes")            @unknown default:                break            }            // Weiterhören            self?.receiveMessage()        case .failure(let error):            print("Fehler beim Empfang: \\(error)")        }    }}

Wichtig: Der Aufruf von receive verarbeitet nur eine einzelne Nachricht. Für den kontinuierlichen Datenempfang muss er innerhalb des Erfolgs-Closures erneut aufgerufen werden.



Architektur einer Echtzeitanwendung in Swift

Für den produktiven Einsatz von WebSocket muss die Architektur durchdacht sein. Es wird empfohlen, eine Serviceschicht mit einem Protokoll und Delegaten zu verwenden, um die Netzwerklogik von der UI zu trennen.



Protokoll des WebSocket-Dienstes

protocol WebSocketServiceProtocol: AnyObject {    var isConnected: Bool { get }    func connect()    func disconnect()    f                

Blogs

Buchempfehlungen