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
웹소켓 테스트는 크롬 확장프로그램으로 했다.
테스트 해보자.
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
참고
320x100
'Project > 채팅' 카테고리의 다른 글
[채팅] 0. 기획, 목표 (0) | 2021.06.13 |
---|
댓글