Sobes.tech
Middle

Millist lahendust kasutasite WebSocketiga töötamisel?

sobes.tech AI

Vastus AI-lt

WebSocket-ā darbam iOS lietotnēs es izmantoju vairākas pieejas. Galvenā nativā metode ir URLSessionWebSocketTask, kas ir pieejama no iOS 13.

Lai strādātu ar vecākām iOS versijām vai ja nepieciešams izmantot vairāk uzlabotas funkcijas (piemēram, automātisku atkārtotu savienošanos, pingus, lai uzturētu savienojumu), es izmantoju trešo pušu bibliotēkas.

URLSessionWebSocketTask (iOS 13+):

Priekšrocības:

  • Nativs API, kas integrēts ar URLSession.
  • Nav nepieciešamas trešo pušu atkarības.
  • Atbalsta teksta un bināru ziņojumu sūtīšanu un saņemšanu.

Trūkumi:

  • Pieejams tikai no iOS 13.
  • Nepieciešama manuāla atkārtotas savienojuma, pingus un citu papildu funkciju realizācija.

Piemērs lietošanai:

// Nepieciešamo ietvaru imports
import Foundation

// WebSocket URL izveide
guard let url = URL(string: "ws://example.com/socket") else {
    return // URL kļūdas apstrāde
}

// Sesijas izveide
let session = URLSession(configuration: .default)

// WebSocket uzdevuma izveide
let webSocketTask = session.webSocketTask(with: url)

// Uzdevuma uzsākšana
webSocketTask.resume()

// Teksta ziņojuma sūtīšana
webSocketTask.send(.string("Hello, server!")) { error in
    if let error = error {
        // Sūtīšanas kļūdas apstrāde
        print("WebSocket sūtīšanas kļūda: \(error)")
    }
}

// Ziņojumu saņemšana
func receiveMessage() {
    webSocketTask.receive { result in
        switch result {
            case .failure(let error):
                // Saņemšanas kļūdas apstrāde
                print("WebSocket saņemšanas kļūda: \(error)")
            case .success(let message):
                switch message {
                    case .string(let text):
                        // Teksta ziņojuma apstrāde
                        print("Saņemts teksta ziņojums: \(text)")
                    case .data(let data):
                        // Bināra ziņojuma apstrāde
                        print("Saņemts datu ziņojums: \(data)")
                    @unknown default:
                        // Nezināms ziņojuma tips
                        fatalError()
                }
                // Rekursīva izsaukšana, lai saņemtu nākamo ziņojumu
                self.receiveMessage()
        }
    }
}

// Ziņojumu saņemšanas uzsākšana
receiveMessage()

// Savienojuma slēgšana (piemēram, iziet no ekrāna)
webSocketTask.cancel(with: .goingAway, reason: nil)

Trešo pušu bibliotēkas (piemēram, Starscream):

Priekšrocības:

  • Saderība ar vecākām iOS versijām.
  • Bieži nodrošina papildu funkcijas "out of the box": automātisku atkārtotu savienošanos, pingus, ērtāku API.
  • Aktīva kopiena un atbalsts.

Trūkumi:

  • Papildu atkarība projektā.
  • Nepieciešama bibliotēkas atjauninājumu uzraudzība.

Konkrētas risinājuma izvēle ir atkarīga no prasītās iOS versijas, funkcionalitātes sarežģītības un personīgajām vēlmēm attiecībā uz trešo pušu atkarībām. Lielākajā daļā jauno projektu ar iOS 13+ atbalstu es sāktu ar URLSessionWebSocketTask un pievienotu trešo pušu bibliotēku, ja būtu nepieciešamas tās papildu iespējas.