WebSocket-Bibliotheken für Swift: Starscream und URLSessionWebSocketTask

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

WebSocket-Bibliotheken für Swift (iOS/macOS): Starscream und URLSessionWebSocketTask



WebSocket ist ein Protokoll, das eine Vollduplex-Kommunikation zwischen Client und Server über eine einzige TCP-Verbindung ermöglicht. Im Swift-Ökosystem (iOS/macOS) gibt es zwei Hauptansätze für die Arbeit mit WebSocket: die native Implementierung URLSessionWebSocketTask (verfügbar ab iOS 13/macOS 10.15) und die beliebte Drittanbieter-Bibliothek Starscream. Beide ermöglichen die Erstellung reaktiver Echtzeit-Anwendungen: Chats, Kursfeeds, Multiplayer-Spiele usw.



Native Implementierung URLSessionWebSocketTask

Mit der Veröffentlichung von iOS 13 hat Apple die integrierte WebSocket-Unterstützung im Foundation-Framework hinzugefügt. Dies macht die Einbindung von Drittanbieter-Abhängigkeiten überflüssig, wenn Ihre App auf moderne Betriebssystemversionen ausgerichtet ist.



Hauptfunktionen:

  • Vollständig asynchrone Arbeit über async/await oder Callbacks
  • Automatische Verwaltung des Verbindungslebenszyklus
  • Unterstützung von closeCode, closeReason für korrekte Beendigung
  • Integrierte Arbeit mit URLSession (Unterstützung von Timeouts, Caching-Richtlinien)


Beispiel für Verbindung und Nachrichtensenden:

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("Fehler beim Senden: \\(error.localizedDescription)") } } } private func receiveMessage() { webSocketTask?.receive { [weak self] result in switch result { case .success(let message): switch message { case .string(let text): print("Empfangen: \\(text)") case .data(let data): print("Binärdaten empfangen: \\(data)") @unknown default: fatalError() } // Weiterhören self?.receiveMessage() case .failure(let error): print("Fehler beim Empfangen: \\(error)") // Möglicherweise Wiederverbindung } } } func disconnect() { webSocketTask?.cancel(with: .normalClosure, reason: nil) }}


Starscream — flexible und bewährte Bibliothek

Starscream ist eine Open-Source-WebSocket-Bibliothek für Swift, geschrieben von Dalton Cherry und von der Community unterstützt. Sie funktioniert auf iOS, macOS, tvOS und watchOS, beginnend mit älteren Versionen (iOS 8+). Starscream bietet mehr Kontrolle über die Verbindung und unterstützt zusätzliche Funktionen wie Komprimierung (permessage-deflate) und benutzerdefinierte Header.



Installation über Swift Package Manager:

// In Package.swift oder über Xcode: File → Swift Packages → Add Package Dependency.package(url: "https://github.com/daltoniam/Starscream.git", from: "4.0.0")


Hauptfunktionen:

  • Unterstützung von WebSocketDelegate für alle Ereignisse (Verbindung, Datenempfang, Fehler, Trennung)
  • Manuelle Verwaltung von Pings/Pongs zur Aufrechterhaltung der Verbindung
  • Möglichkeit zum Senden von Binärdaten (Data) und Zeichenketten (String/UTF-8)
  • Unterstützung von SSL/TLS und selbstsignierten Zertifikaten

Empfehlungen