최종프로젝트에서 구현 예정인 기술은 Websocket방식인 실시간 채팅이다.
배운적도,구현해본 경험도 없기에 기초 개념부터 배워야했다.
참고 자료들로 조금씩 구현해봤다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-websocket'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
}
@Component
public class WebSockChatHandler extends TextWebSocketHandler {
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
String payload = message.getPayload();
TextMessage textMessage = new TextMessage("Welcome chatting sever");
session.sendMessage(textMessage);
}
}
@RequiredArgsConstructor
@Configuration
@EnableWebSocket
public class WebSockConfig implements WebSocketConfigurer {
private final WebSocketHandler webSocketHandler;
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(webSocketHandler, "/ws/chat").setAllowedOrigins("*");
}
}
여기까지 구현하면 websocket통신이 완료되었다. 하지만 ws://localhost:8080/ws/chat에 연결된 클라이언트만 메세지 통신이 가능하다. 채팅방이 단 하나인 채팅 서버다.
여러개의 채팅방을 만들고 해당 채팅방의 모든 클라이언트들 간에 메세지를 주고 받으려면 고도화 작업이 필요하다.
클라이언트들은 서버에 접속하면 개별 Websocket Session을 갖는다.
해당 Session정보를 채팅방에 맵핑 시키고 서버에 전달된 메세지를 특정 채팅방의 wevsocket Session으로 보내도록 하여 개별 채팅방을 만든다.