[iOS] 웹소켓과 Starscream

황석범·2025년 2월 8일
0

내일배움캠프_iOS_5기

목록 보기
73/76

웹소켓(WebSocket)

웹소켓은 서버와 클라이언트가 지속적으로 양방향 통신을 수행할 수 있는 프로토콜로 Swift에서는 URLSessionWebSocketTask를 사용하여 기본적인 웹소켓 연결을 구현할 수 있다. 유명한 라이브러리로는 StarStream이라는 웹소켓 라이브러리가 있다.


Swift의 기본 웹소켓

import Foundation

class WebSocketManager {
    private var webSocketTask: URLSessionWebSocketTask?
    
    func connect() {
        let url = URL(string: "wss://your-websocket-url")!
        webSocketTask = URLSession.shared.webSocketTask(with: url)
        webSocketTask?.resume()
        receiveMessage()
    }

    func sendMessage(_ message: String) {
        let message = URLSessionWebSocketTask.Message.string(message)
        webSocketTask?.send(message) { error in
            if let error = error {
                print("웹소켓 메시지 전송 오류: \(error)")
            }
        }
    }

    func receiveMessage() {
        webSocketTask?.receive { [weak self] result in
            switch result {
            case .failure(let error):
                print("웹소켓 메시지 수신 오류: \(error)")
            case .success(let message):
                switch message {
                case .string(let text):
                    print("받은 메시지: \(text)")
                case .data(let data):
                    print("받은 데이터: \(data)")
                @unknown default:
                    break
                }
            }
            self?.receiveMessage() // 계속 수신을 대기하도록 재귀 호출
        }
    }

    func disconnect() {
        webSocketTask?.cancel(with: .goingAway, reason: nil)
        webSocketTask = nil
    }
}
  1. connect() → 웹소켓을 서버에 연결
  2. sendMessage(_:) → 메시지를 웹소켓을 통해 전송
  3. receiveMessage() → 서버로부터 메시지를 지속적으로 수신
  4. disconnect() → 웹소켓 연결 종료

StarScream

기능Swift 기본 웹소켓 (URLSessionWebSocketTask)StarScream
자동 재연결수동 재연결 필요자동 재연결
RxSwift/Combine 지원직접 Rx 변환해야 함Observable / Publisher 내장
백그라운드 지원수동으로 관리 필요자동 처리
Heartbeat (Keep-Alive) 기능직접 구현해야 함내장
JSON 인코딩/디코딩 지원직접 구현 필요자동 변환 가능
메시지 필터링직접 구현해야 함API 내장
구조체(Struct), 열거형(Enum) 지원지원 안됨 (클래스만 가능)가능
프로토콜 채택 가능가능가능

StarStcream은 iOS용 웹소켓 관리 라이브러리로 크게 자동 재연결 지원과 백그라운드 상태에서의 안정적인 유지가 특징이다.

profile
iOS 공부중...

0개의 댓글

관련 채용 정보