반응형
1. websocket 연결설정
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;
import lombok.RequiredArgsConstructor;
@Configuration
@EnableWebSocket
@RequiredArgsConstructor
public class WebSocketConfig implements WebSocketConfigurer{
//밑에서 만들 WebSocketHandler 클래스
private final WebSocketHandler webSocketHandler;
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry){
registry.addHandler(webSocketHandler,"/websocket").setAllowedOrigins("*");
// /websocket : 연결url
//setAllowedOrigins : 웹소켓 cors정책으로, 허용 도메인 지정
}
}
2. websocket 핸들러 생성. web socket 연결 및 종료의 수행에 대한 내용
import java.util.concurrent.ConcurrentHashMap;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;
@Component
//TextWebSocketHandler 상속 시 3개의 메소드 오버라이딩
public class WebSocketHandler extends TextWebSocketHandler{
//ConcurrentHashMap : 멀티 스레드 환경에서 사용. entry 아이템별로 락을 건다.
private static final ConcurrentHashMap<String, WebSocketSession> CLIENTS = new ConcurrentHashMap<String, WebSocketSession>();
public void afterConnectionEstablished(WebSocketSession session)throws Exception{
CLIENTS.put(session.getId(), session);
System.out.println("session Id(" + session.getId() + ") 연결");
//출력예시 : session Id(84693265-e147-0b2c-5505-b2d3c62e62b4) 연결
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception{
CLIENTS.remove(session.getId());
System.out.println("session Id(" + session.getId() + ") 연결해제");
//출력예시 : session Id(03017781-abf2-bc66-855e-f217bb99b275) 연결해제
}
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception{
String id = session.getId();
System.out.println(CLIENTS.toString());
//출력예시 : {03017781-abf2-bc66-855e-f217bb99b275=StandardWebSocketSession[id=03017781-abf2-bc66-855e-f217bb99b275, uri=ws://localhost:8081/websocket]}
CLIENTS.entrySet().forEach(arg ->{
if(!arg.getKey().equals(id)){
try{
arg.getValue().sendMessage(message);
}catch(Exception e){
e.printStackTrace();
}
}
});
}
}
테스트 방법
1. chrome에서 제공하는 확장 프로그램 이용
2. postman에서 제공하는 웹소켓 연결 기능 이용
반응형
'코딩 관련 > Spring 관련' 카테고리의 다른 글
Springboot에서 STOMP 구현하기 / springboot stomp 예시 / spring boot websocket stomp / STOMP 메세지 테스트 예시 (0) | 2024.02.17 |
---|---|
@Autowired is null (0) | 2023.02.16 |
Springboot JPA 연동 / postgreSQL JPA 연동 (0) | 2023.02.09 |
springboot H2 연동하기 / JPA 사용하기 (0) | 2023.01.27 |
[Spring][Maven] maven 프로젝트 외부 라이브러리 추가하기 (0) | 2022.06.08 |