티스토리 뷰

프로그래밍/iOS

[SWIFT] STOMP Client 맛보기

Bㅇㅇker 2020. 4. 18. 08:20
반응형

STOMP을 Swift 환경에서 사용하는 방법에 대해서 알아보겠습니다.

 

   
API DESC
StompClientLib https://github.com/WrathChaos/StompClientLib

위에 명시된 라이브러리를 Android .gradledependencies 합니다.



STOMP Client

 

STOMP Client 사용법은 다음과 같이 나눌 수 있습니다.

// 1. INIT
let url = NSURL(string: "ws://[도메인]/connect/websocket")
let intervalSec = 1.0
public var soketClient = StompClientLib()

// 2. CONNECT
func registerSocket(){
  if(soketClient.isConnected()){
    disconnectSocket()
  }
  soketClient.openSocketWithURLRequest(request: NSURLRequest(url: url as! URL), delegate: self)
}

// 3. DELEGATE
func stompClientDidDisconnect(client: StompClientLib!) {
  print("Socket is Disconnected")
}

func stompClientDidConnect(client: StompClientLib!) {
  print("Socket is connected")
}

func serverDidSendReceipt(client: StompClientLib!, withReceiptId receiptId: String) {
  print("Receipt : \(receiptId)")
}

func serverDidSendError(client: StompClientLib!, withErrorMessage description: String, detailedErrorMessage message: String?) {
  print("Error Send : \(String(describing: message))")

  if(!soketClient.isConnected()){
    reconnect()
  }
}

func serverDidSendPing() {
  print("Server ping")
}

// 3. SUBSCRIBE
soketClient?.subscribe(destination: "[destination]")

// 4. SEND
stomp.send("/app/[destination]", "[MESSAGE]").subscribe {
  if(it){}
}



STOMP Init

 

Stomp 초기화 작업을 합니다.

여기서 ws 뒤에 채팅서버 도메인을 입력하면 됩니다.

http 로 시작한다면 ws 로, https 로 시작 시 wss로 작업하셔야 합니다.

let url = NSURL(string: "ws://[도메인]/connect/websocket")
let intervalSec = 1.0
public var soketClient = StompClientLib()



Connect

 

채팅 서버에 연결은 soketClient.openSocketWithURLRequest 로 합니다.

STOMP 상태에 따라 delegate로 받게 됩니다.

func registerSocket(){
  soketClient.openSocketWithURLRequest(request: NSURLRequest(url: url as! URL), delegate: self)
}



StompClientLibDelegate

 

STOMP 상태에 따른 콜백은 StompClientLibDelegate 을 통하여 받게 됩니다.

func stompClientDidDisconnect(client: StompClientLib!) {
  print("Socket is Disconnected")
}

func stompClientDidConnect(client: StompClientLib!) {
  print("Socket is connected")
}

func serverDidSendReceipt(client: StompClientLib!, withReceiptId receiptId: String) {
  print("Receipt : \(receiptId)")
}

func serverDidSendError(client: StompClientLib!, withErrorMessage description: String, detailedErrorMessage message: String?) {
  print("Error Send : \(String(describing: message))")
}

func serverDidSendPing() {
  print("Server ping")
}



Subscribe

 

채널 구독하는 방법은 soketClient?.subscribe(destination: "[destination]") 를 하면 됩니다.

예를들어 방이름 1004 채널을 구독 한다면 다음과 같이 표현 할 수 있습니다.

  • 방이름 : 1004
  • 동작 : 방을 구독한다.
soketClient?.subscribe(destination: "1004")

 

 

Send

 

stomp.send("/app/[destination]", "[MESSAGE]") 형태로 구성되어 있으며 MESSAGE 는 메시지 내용 뿐만 아니라 각 정책에 맞게 JSON String으로 데이터를 전달하셔도 됩니다.

한가지 예로써 "안녕"이라는 문자를 보낸다면 다음과 같이 표현할 수 있습니다.

 

예제 소스 설명

  • 동작 : "안녕" 이라는 메시지를 채팅방에 보낸다.
let dto = StompSendDTO(message: "안녕")
soketClient?.sendJSONForDict(dict: dto.nsDictionary, toDestination: sendToDestination)

 

struct StompSendDTO {
    var message : String? = ""
    var dictionary: [String: Any] {
        return ["message": message]
    }

    var nsDictionary: NSDictionary{
        return dictionary as NSDictionary
    }
}



마무리

 

간단히 STOMP 라이브러리를 활용한 init, connect, subscript, send 방법을 알아봤습니다.

실시간 처리 시 STOMP는 도움이 많이 될 것으로 판단 됩니다.



참고

 

StompClientLib

반응형
댓글