iOS - WebSocket / StarScream 라이브러리

이한솔·2024년 6월 21일
0

iOS 앱개발 🍏

목록 보기
43/49

StarScream 라이브러리로 WebSocket 구현

StarScream은 WebSocket 클라이언트 라이브러리로 WebSocket 연결을 쉽게 설정하고, 메시지를 주고받으며, 연결 상태를 모니터링할 수 있는 기능을 제공한다.



StarScream 구현 방법

  1. WebSocket 연결
    Swift Packagr Manager로 라이브러리 설치 후, StarScream을 import 하고 WebSocket을 연결을 설정한다.
import UIKit
import Starscream

class ViewController: UIViewController, WebSocketDelegate {
    var socket: WebSocket!

    override func viewDidLoad() {
        super.viewDidLoad()
        
        var request = URLRequest(url: URL(string: "ws://localhost:8080/")!)
        request.timeoutInterval = 5
        request.setValue("chat,superchat", forHTTPHeaderField: "Sec-WebSocket-Protocol")
        request.setValue("Everything is Awesome!", forHTTPHeaderField: "My-Awesome-Header")
        
        socket = WebSocket(request: request)
        socket.delegate = self
        socket.connect()
    }

   
}
  1. WebSocket 이벤트 처리
    didReceive 메서드는 다양한 WebSocket 이벤트를 처리한다. 각 이벤트는 WebSocketEvent 열거형의 표현된다.

    connected: WebSocket 연결이 성공적으로 이루어졌을 때 호출
    disconnected: WebSocket 연결이 종료되었을 때 호출
    text: 텍스트 메시지를 수신했을 때 호출
    binary: 바이너리 데이터를 수신했을 때 호출
    ping: 서버로부터 핑 메시지를 수신했을 때 호출
    pong: 서버로부터 퐁 메시지를 수신했을 때 호출
    viabilityChanged: 연결의 유효성이 변경되었을 때 호출
    reconnectSuggested: 재연결이 권장될 때 호출
    cancelled: WebSocket 연결이 취소되었을 때 호출
    error: WebSocket 연결 중 오류가 발생했을 때 호출
    peerClosed: WebSocket 연결이 상대방에 의해 닫혔을 때 호출
 func didReceive(event: WebSocketEvent, client: WebSocket) {
        switch event {
        case .connected(let headers):
            print("websocket is connected: \(headers)")
        case .disconnected(let reason, let code):
            print("websocket is disconnected: \(reason) with code: \(code)")
        case .text(let string):
            print("Received text: \(string)")
        case .binary(let data):
            print("Received data: \(data.count) bytes")
        case .ping(_):
            break
        case .pong(_):
            break
        case .viabilityChanged(_):
            break
        case .reconnectSuggested(_):
            break
        case .cancelled:
            print("websocket connection cancelled")
        case .error(let error):
            print("websocket encountered an error: \(String(describing: error))")
        case .peerClosed:
            break
        }
    }
  1. 메시지 전송
    WebSocket을 통해 메시지를 전송한다.
// 텍스트 메시지 전송
socket.write(string: "Hello, WebSocket!")

// 바이너리 메시지 전송
let data = Data([0x01, 0x02, 0x03])
socket.write(data: data)
  1. 연결 해제
    disconnect 메서드를 호출하여 연결을 종료한다.
socket.disconnect()

1개의 댓글

comment-user-thumbnail
2024년 6월 21일

좋은 글 잘 읽고 있어요~

답글 달기