본문 바로가기
Project/채팅

[채팅] 1. Spring boot WebSocket Handler 기본 세팅

by 햄과함께 2021. 6. 22.
320x100
// ReactiveWebSocketHandler.kt
@Component
class ReactiveWebSocketHandler : WebSocketHandler {

    private val log = LoggerFactory.getLogger(this.javaClass)

    override fun handle(session: WebSocketSession): Mono<Void> {
        return session.receive()
            .map {
                it.payloadAsText.also { log.info(it) }
            }.then()
    }
}

 WebSocketHandler 인터페이스를 상속받은 클래스를 만들어 Component로 등록한다.

handle에서 메시지가 들어올 때, 할 일 들을 명시해줘야하는데 일단은 돌아가는지 확인하는 정도로만 구현했다.

receive 하는 경우 이를 텍스트로 만들어 로그에 찍어보았다.

 

// WebSocketConfig.kt

@Configuration
class WebSocketConfig(
    private val webSocketHandler: WebSocketHandler
) {

    @Bean
    fun webSocketHandlerMapping(): HandlerMapping {
        return SimpleUrlHandlerMapping().apply {
            order = -1
            urlMap = mapOf("/chat" to webSocketHandler)
        }
    }

}

 

HandlerMapping Bean을 등록하여 /chat path로 오는 경우 webSocketHandler를 사용하게 매핑해준다.

webSocketHandler는 아까 WebSocketHandler를 상속받아 구현한 ReactiveWebSocketHandler 이다.


테스트해보기

https://chrome.google.com/webstore/detail/simple-websocket-client/pfdhoblngboilpfeibdedpjgfnlcodoo

 

Simple WebSocket Client

Construct custom Web Socket requests and handle responses to directly test your Web Socket services.

chrome.google.com

웹소켓 테스트는 크롬 확장프로그램으로 했다.

테스트 해보자.

8080를 띄우고 path를 /chat으로 해놨기 때문에

ws://localhost:8080/chat 으로 접속한다.

메시지를 send하고 접속을 끊은 후 재접속해도 전송한 메시지가 정상 출력되는 것을 확인할 수 있다.

 

깃허브 : websocket setting


Trouble shooting 

[Spring][Kotlin] Main class name has not been configured and it could not be resolved

[Gradle][Error] Cannot lock execution history cache ... as it has already been locked by this process.


참고

https://www.baeldung.com/spring-5-reactive-websockets

https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html#webflux-websocket-server

320x100

'Project > 채팅' 카테고리의 다른 글

[채팅] 0. 기획, 목표  (0) 2021.06.13

댓글