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.