Sobes.tech
Middle

WebSocket менен иштөө үчүн кайсы чечимди колдондуңуз?

sobes.tech AI

AIден жооп

iOS тиркемелеринде WebSocket менен иштөө үчүн мен бир нече ыкмаларды колдонуп келем. Негизги туулук ыкма URLSessionWebSocketTask колдонуу, ал iOS 13тен бери жеткиликтүү.

Эскирек iOS версиялары үчүн же автоматтык кайра туташуу, пингдер сыяктуу кошумча функцияларды колдонуу керек болгондо, мен үчүнчү тараптын китепканаларын колдонуп келем.

URLSessionWebSocketTask (iOS 13+):

Артыкчылыктары:

  • Табигый API, URLSession менен интеграцияланган.
  • Чет элдик көзкарандылыктарды талап кылбайт.
  • Текст жана бинардык билдирүүлөрдү жөнөтүү жана алуу мүмкүнчүлүгүн камсыз кылат.

Кемчиликтери:

  • only iOS 13тен бери жеткиликтүү.
  • Кайра туташуу, пингдер жана башка кошумча мүмкүнчүлүктөрдү кол менен ишке ашыруу керек.

Колдонуу мисалы:

// Керектүү фреймворктарды импорттоо
import Foundation

// WebSocket үчүн URL түзүү
guard let url = URL(string: "ws://example.com/socket") else {
    return // URL катасын иштетүү
}

// Сессия түзүү
let session = URLSession(configuration: .default)

// WebSocket тапшырмасын түзүү
let webSocketTask = session.webSocketTask(with: url)

// Тапшырманы иштетүү
webSocketTask.resume()

// Текст билдирүүнү жөнөтүү
webSocketTask.send(.string("Hello, server!")) { error in
    if let error = error {
        // Жөнөтүү катасын иштетүү
        print("WebSocket жөнөтүү катасы: \(error)")
    }
}

// Хабарламаларды алуу
func receiveMessage() {
    webSocketTask.receive { result in
        switch result {
            case .failure(let error):
                // Алып жатканда катаны иштетүү
                print("WebSocket кабыл алуу катасы: \(error)")
            case .success(let message):
                switch message {
                    case .string(let text):
                        // Текст билдирүүнү иштетүү
                        print("Алып жаткан текст билдирүү: \(text)")
                    case .data(let data):
                        // Бинардык билдирүүнү иштетүү
                        print("Алып жаткан маалыматтар: \(data)")
                    @unknown default:
                        // Белгисиз билдирүү түрү
                        fatalError()
                }
                // Кийинки билдирүүнү алуу үчүн рекурсивтик чакыруу
                self.receiveMessage()
        }
    }
}

// Алып жатканды баштоо
receiveMessage()

// Байланышту жабуу (мисалы, экрандан чыгып жатканда)
webSocketTask.cancel(with: .goingAway, reason: nil)

Үчүнчү тараптын китепканалар (мисалы, Starscream):

Артыкчылыктары:

  • Эскирек iOS версиялары менен шайкеш.
  • Көп учурда кошумча функцияларды "кушумча" түрдө камсыз кылат: автоматтык кайра туташуу, пингдер, ыңгайлуу API.
  • Активдүү коомчулук жана колдоо.

Кемчиликтери:

  • Жеке көзкарандылык.
  • Китепкананын жаңыртууларын көзөмөлдөө керек.

Конкреттүү чечимди тандоо талап кылынган iOS версиясына, функциялардын кыйынчылыгына жана үчүнчү тараптын китепканаларын колдонуу артыкчылыктарына жараша болот. Көпчүлүк жаңы долбоорлордо, iOS 13+ колдоосу менен, мен URLSessionWebSocketTask менен баштап, кошумча мүмкүнчүлүктөр үчүн үчүнчү тараптын китепканасын кошом.