Middle
WebSocket ilə işləmək üçün hansı həll yolunu istifadə etdiniz?
sobes.tech Süni İntellekt
AI-dan cavab
iOS tətbiqlərində WebSocket ilə işləmək üçün bir neçə yanaşmadan istifadə etdim. Əsas yerli metod URLSessionWebSocketTask-ın istifadəsidir, bu iOS 13-dən etibarən mövcuddur.
Daha köhnə iOS versiyaları və ya daha inkişaf etmiş funksiyalar (məsələn, avtomatik yenidən qoşulma, əlaqəni saxlamaq üçün pinglər) üçün üçüncü tərəf kitabxanalarından istifadə etdim.
URLSessionWebSocketTask (iOS 13+):
Üstünlüklər:
- Təbii API,
URLSessionilə inteqrasiya olunub. - Xarici asılılıqlar tələb etmir.
- Mətn və ikili mesajların göndərilməsi və alınmasını dəstəkləyir.
Çatışmazlıqlar:
- Yalnız iOS 13 və yuxarı üçün mövcuddur.
- Yenidən qoşulma, pinglər və digər əlavə funksiyalar üçün əl ilə həyata keçirmək lazımdır.
İstifadə nümunəsi:
// Lazımi framework-ləri idxal et
import Foundation
// WebSocket üçün URL yaradın
guard let url = URL(string: "ws://example.com/socket") else {
return // URL xətasını idarə et
}
// Sessiya yaradın
let session = URLSession(configuration: .default)
// WebSocket tapşırığını yaradın
let webSocketTask = session.webSocketTask(with: url)
// Tapşırığı başlat
webSocketTask.resume()
// Mətn mesajı göndər
webSocketTask.send(.string("Hello, server!")) { error in
if let error = error {
// Göndərmə xətasını idarə et
print("WebSocket göndərmə xətası: \(error)")
}
}
// Mesajları qəbul et
func receiveMessage() {
webSocketTask.receive { result in
switch result {
case .failure(let error):
// Qəbul xətasını idarə et
print("WebSocket qəbul xətası: \(error)")
case .success(let message):
switch message {
case .string(let text):
// Mətn mesajını işləyin
print("Qəbul edilən mətn mesajı: \(text)")
case .data(let data):
// İkili mesajı işləyin
print("Qəbul edilən məlumat mesajı: \(data)")
@unknown default:
// Naməlum mesaj tipi
fatalError()
}
// Növbəti mesajı qəbul etmək üçün rekursiv çağırış
self.receiveMessage()
}
}
}
// Qəbul etməyə başla
receiveMessage()
// Bağlantını bağla (məsələn, ekran çıxarkən)
webSocketTask.cancel(with: .goingAway, reason: nil)