WebSocket-Bibliothek Swift: Starscream für iOS/macOS

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

Starscream – WebSocket-Bibliothek für Swift (iOS/macOS)



Starscream ist eine leichte, aber leistungsstarke Bibliothek für die Arbeit mit dem WebSocket-Protokoll auf Apple-Plattformen. Sie ist vollständig in Swift geschrieben, hat keine externen Abhängigkeiten und unterstützt iOS, macOS, tvOS und watchOS. Wenn Sie eine bidirektionale Echtzeit-Kommunikation zwischen einer mobilen App und einem Server (Chat, Benachrichtigungen, Online-Spiele) benötigen, ist Starscream eine ausgezeichnete Wahl.



Hauptfunktionen

  • Vollständige Unterstützung des Standards RFC 6455 (WebSocket-Protokoll).
  • Funktioniert über gesicherte Verbindungen wss:// und normale ws://.
  • Automatische Wiederverbindung bei Verbindungsabbruch.
  • Unterstützung von Frames: Text, Binärdaten (Data), Ping/Pong.
  • Einfache Integration über CocoaPods, Swift Package Manager oder Carthage.
  • Kompatibilität mit Combine (iOS 13+) und Swift Concurrency (async/await).


Installation über Swift Package Manager (empfohlen)

Fügen Sie das Paket in Xcode hinzu: File → Add Packages und fügen Sie die Repository-URL ein:

https://github.com/daltoniam/Starscream.git

Wählen Sie die Version (die neueste stabile) und fügen Sie sie zu Ihrem Target hinzu.



Basisbeispiel für die Verbindung

Erstellen wir einen einfachen WebSocket-Client, der eine Verbindung zum Server herstellt und empfangene Nachrichten ausgibt.

import Starscream

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

extension WebSocketManager: WebSocketDelegate { func didReceive(event: WebSocketEvent, client: WebSocket) { switch event { case .connected(let headers): print("Verbunden! Header: \\(headers)") case .disconnected(let reason, let code): print("Getrennt: \\(reason) (Code: \\(code))") case .text(let string): print("Text erhalten: \\(string)") case .binary(let data): print("Binärdaten erhalten: \\(data.count) Bytes") case .ping(let data): print("Ping: \\(data?.hexString ?? "keine Daten")") case .pong(let data): print("Pong: \\(data?.hexString ?? "keine Daten")") case .viabilityChanged(let isViable): print("Verbindung aktiv: \\(isViable)") case .reconnectSuggested(let shouldReconnect): print("Wiederverbindung empfohlen: \\(shouldReconnect)") case .cancelled: print("Verbindung abgebrochen") case .error(let error): print("Fehler: \\(error?.localizedDescription ?? "unbekannter Fehler")") } }}


Daten senden

Starscream ermöglicht das Senden von Textzeichenfolgen sowie Binärdaten. Beispiel für das Senden von JSON:

func sendMessage(text: String) {    let message: [String: Any] = [        "type": "chat",        "content": text,        "timestamp": Int(Date().timeIntervalSince1970)    ]    if let jsonData = try? JSONSerialization.data(withJSONObject: message, options: []),       let jsonString = String(data: jsonData, encoding: .utf8) {        socket?.write(string: jsonString)    }}

// Senden einer Binärdatei (z. B. eines Bildes)func sendImage(data: Data) { socket?.write(data: data)}


Arbeiten mit Combine (iOS 13+)

Für reaktive Programmierung stellt Starscream einen Publisher bereit:

import Combine

class CombineViewModel: ObservableObject { @Published var lastMessage: String = "" private var socket: WebSocket? private var cancellables = Set<AnyCancellable>() func setup() { var req

Empfehlungen