Websocket
- 주로 채팅
- 연결 종료시 까지 양방향 통신
- 클라이언트와 서버간의 TCP 연결을 길게 유지하고, 서로 양방향으로 데이터를 전달하게 해주는 통신 규약의 일종
- 연결이 끊어졌을 때 다시 붙이는 작업이 필요함
sse
- 주로 알람
-
upgrade 하자 (웹소켓) 라고 하는 요청을 handshake 요청이라고 한다.
Spring
TextWebSocketHandler 상속받아서 사용
- 데이터형태는 byte 형태
@Slf4j
@Component
public class SimpleChatHandler extends TextWebSocketHandler {
// 현재 연결되어 있는 클라이언트를 관리하기 위한 리스트
private final List<WebSocketSession> sessions = new ArrayList<>();
@Override
// webSocket 최초 연결 시 실행
public void afterConnectionEstablished(
// 연결 되어있는 브라우저 하나당 연결 상태를 표현하기 위해
// 연결된 클라이언트(사용자)를 나타내는 객체
// 누구한테 보낼지에 대한 정보가 담겨있음
WebSocketSession session
)throws Exception{
// 방금 참여한 사용자 저장
sessions.add(session);
log.info("connected with session id: {}, total sessions : {}", session.getId(), sessions.size());
}
@Override
// WebSocket 메세지를 받으면 실행
protected void handleTextMessage(
WebSocketSession session,
TextMessage message
)throws Exception{
// 사용자가 보낸 메세지를 받는 부분
// TextMessage로 사용자가 보낸 메세지를 받아와 payload라는 문자열 변수애 getPayload();
String payload = message.getPayload();
log.info("received: {}", payload);
super.handleTextMessage(session, message);
}
@Override
// WebSocket 연결이 종료되었을때
public void afterConnectionClosed(
WebSocketSession session,
CloseStatus status) throws Exception {
log.info("connection with {} closed", session.getId());
// 더이상 세션 객체를 보유하지 않도록
sessions.remove(session);
super.afterConnectionClosed(session, status);
}
}
package com.example.chat.config;
import com.example.chat.SimpleChatHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
// TODO Bean 객체로 SimpleChatHandler 가져오기
// 생성자를 이용해 가져오기
private final SimpleChatHandler simpleChatHandler;
public WebSocketConfig(
SimpleChatHandler simpleChatHandler
){
this.simpleChatHandler = simpleChatHandler;
}
@Override
// WebSocketHandler 객체를 등록하기 위한 메소드
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(simpleChatHandler, "ws/chat").setAllowedOrigins("*");
}
}
config 까지 작성 후 실행 > localhost:8080/chat/rooms > 이름 입력 > 메세지 입력 > 콘솔 확인
메세지를 받는 것 까지 구현 완료
'study' 카테고리의 다른 글
[AWS RDS] RDS 생성 및 연결 ( +보안그룹 변경 ) (1) | 2024.09.03 |
---|---|
[Docker] MySQL설치 및 intellij에서 접속하기 (1) | 2024.09.03 |
(230627) AOP (0) | 2024.09.03 |
(230626) Validation (0) | 2024.09.03 |
(230623) [Postman] MultipartFile (0) | 2024.09.03 |