StarScream은 WebSocket 클라이언트 라이브러리로 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()
}
}
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
}
}
// 텍스트 메시지 전송
socket.write(string: "Hello, WebSocket!")
// 바이너리 메시지 전송
let data = Data([0x01, 0x02, 0x03])
socket.write(data: data)
socket.disconnect()
좋은 글 잘 읽고 있어요~