Sobes.tech
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, URLSession ilə 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)